Как предотвратить кражу новой формы WPF? - PullRequest
22 голосов
/ 22 сентября 2009

Я написал простую программу в стиле MSN , которая будет отправлять и получать сообщения, используя WCF . Основная форма содержит текстовое поле для ввода сообщения, которое будет отправлено. В фоновом режиме приложение каждые несколько секунд опрашивает сервер на наличие новых сообщений. При получении нового сообщения открывается новое окно для его отображения. Это должно быть сделано в потоке пользовательского интерфейса с использованием класса Dispatcher.

Проблема в том, что при отображении нового окна фокус смещается от TextBox, поэтому ввод текста прерывается. Это очень раздражает! В MSN Messenger можно продолжить вводить собственное сообщение при его получении. Как это сделать?

В качестве обходного пути я откладываю всплывающее окно с новым сообщением, пока текстовое поле имеет фокус, но должен быть лучший способ!

Ответы [ 3 ]

53 голосов
/ 22 сентября 2009

Ответ прост: начиная с .NET 3.5 SP1 формы WPF имеют свойство ShowActivated. Установите для этого параметра значение false, и любая помеченная таким образом форма больше не будет красть!

0 голосов
/ 23 сентября 2015

В моем приложении мне нужно показать окно уведомлений поверх всех других окон, пока основное окно свернуто, но без кражи фокуса.

Так что я просто делаю это:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.Topmost = true;
    this.Topmost = false;
}
0 голосов
/ 22 сентября 2009

Можно установить для свойства Focusable окна значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...