2009-09-21 3 views
17

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

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

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

+1

Есть ли способ, чтобы открыть новое окно без него фокусируясь? –

ответ

46

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

+8

Форма WPF? Что это? –

-2

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

+1

Не в этом случае. Пользователь должен иметь возможность взаимодействовать с формой – Dabblernl

-1

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

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

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Topmost = true; 
    this.Topmost = false; 
} 
+1

Поскольку загруженное событие срабатывает после того, как окно уже активировано и показано, это не останавливается, если от кражи фокуса. – Wobbles

Смежные вопросы