Ответ 1
Ответ прост: поскольку формы WPF.NET 3.5 SP1 имеют свойство ShowActivated
. Установите это значение в false, и любая отмеченная таким образом форма не будет больше крать фокус!
Я написал простую программу MSN, которая будет отправлять и получать сообщения с помощью WCF. Основная форма содержит текстовое поле для ввода сообщения, которое нужно отправить. В фоновом режиме приложение опроса сервера каждые несколько секунд для новых сообщений. Когда новое сообщение получено, для его отображения открывается новое окно. Это нужно сделать в потоке пользовательского интерфейса, используя класс Dispatcher.
Проблема заключается в том, что при отображении нового окна фокус смещается в сторону от TextBox, так что ввод текста прерывается. Это очень раздражает! В MSN Messenger можно продолжать вводить собственное сообщение при его получении. Как это делается?
В качестве обходного пути я откладываю всплывающее окно с новым сообщением, в то время как TextBox имеет фокус, но должен быть лучший способ!
Ответ прост: поскольку формы WPF.NET 3.5 SP1 имеют свойство ShowActivated
. Установите это значение в false, и любая отмеченная таким образом форма не будет больше крать фокус!
В моем приложении мне нужно показать окно уведомлений поверх всех других окон, в то время как мой MainWindow сведен к минимуму, но без кражи фокуса.
Итак, я просто делаю это:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Topmost = true;
this.Topmost = false;
}
Вы можете установить для свойства Focusable окна значение false.