Приложение WPF перемещается за пределы экрана во время сеанса удаленного доступа

У меня есть проблема, в которой я надеюсь найти лучшее и простое в реализации решение.

Я написал приложение WPF, которое можно перетаскивать по рабочему столу, но я обычно помещаю его в верхний правый угол экрана.

Моя проблема в том, что когда я подключаюсь удаленно из другого места, где разрешение всегда ниже, приложение находится за пределами экрана, и у меня нет возможности вернуть его, если я не убью процесс и не перезапущу его.

Я придумал некоторые идеи, чтобы всегда держать его на виду.

1] Всякий раз, когда он работает, он создает дочерний поток, который проверяет видимое разрешение в цикле. Когда он находится за пределами обнаруженных границ, он обновит свое местоположение.

2] Используйте какую-то систему обмена сообщениями, чтобы отправить ему сообщение, когда я удаленно вхожу, и это заставит его перестроиться.

У кого-нибудь есть предложения??


person Grant    schedule 08.09.2009    source источник


Ответы (1)


У вас может быть DispatcherTimer, который срабатывает периодически (каждые несколько секунд), чтобы убедиться, что окно находится на одном из видимых экранов. Если нет, то он будет перепозиционирован так, как есть.

Вы можете использовать класс System.Windows.Forms.Screen для доступа к информации о рабочем столе пользователя и настройках экрана, даже если вы используете WPF.

Что-то типа:

bool isWithin = false;
foreach (Screen screen in Screen.AllScreens)
{
    if (screen.Bounds.Contains(windowLocation))
        isWithin = true;
}

// if !isWithin, move to 0,0
person Drew Noakes    schedule 08.09.2009
comment
спасибо Дрю - чем диспетчертаймер будет отличаться от нового потока? - person Grant; 08.09.2009
comment
С дополнительным требованием необходимости выравнивания верхнего правого угла вам потребуется доступ к границам экрана, подобным этому. +1 - person Tristan Warner-Smith; 08.09.2009
comment
Пожалуйста. DispatcherTimer сработает в потоке пользовательского интерфейса. Это означает, что вы можете изменять свойства пользовательского интерфейса без перекрестных исключений потоков. Избегание новых потоков часто является хорошей идеей, поскольку они занимают дополнительные ресурсы, и вы должны помнить о том, чтобы аккуратно их очистить при закрытии приложения. - person Drew Noakes; 08.09.2009
comment
Посмотрите, какие странные вещи вам приходится делать, когда вы нарушаете правила дизайна MS. Херф. - person ; 08.09.2009