2009-09-21 9 views
17

Ich habe ein einfaches MSN-style-Programm geschrieben, das Nachrichten unter Verwendung WCF senden und abrufen wird. Das Hauptformular enthält ein Textfeld zum Eingeben der zu sendenden Nachricht. Im Hintergrund fragt die Anwendung den Server alle paar Sekunden nach neuen Nachrichten ab. Wenn eine neue Nachricht empfangen wird, wird ein neues Fenster geöffnet, um es anzuzeigen. Dies muss im Benutzeroberflächenthread mithilfe der Dispatcher-Klasse erfolgen.Wie verhindert man, dass ein neues WPF-Formular den Fokus stiehlt?

Das Problem ist, dass wenn das neue Fenster angezeigt wird, der Fokus weg von der TextBox verschoben wird, so dass die Eingabe unterbrochen wird. Das ist sehr nervig! In MSN Messenger ist es möglich, Ihre eigene Nachricht weiterzugeben, während Sie eine erhalten. Wie wird es gemacht?

Als Workaround verschoben ich das Popup mit der neuen Nachricht, während die TextBox den Fokus hat, aber es sollte einen besseren Weg geben!

+1

Gibt es eine Möglichkeit, ein neues Fenster zu öffnen, ohne sie zu fokussieren? –

Antwort

46

Die Antwort ist einfach: Seit .NET 3.5 SP1 WPF-Formulare haben eine Eigenschaft. Setze dies auf false und jede so markierte Form wird keinen Fokus mehr nicht stehlen!

+8

Ein WPF-Formular? Was ist das? –

-2

Sie könnten die Focusable-Eigenschaft des Fensters auf false festlegen.

+1

Nicht in diesem Fall. Der Benutzer muss in der Lage sein, mit dem Formular – Dabblernl

-1

In meiner Anwendung muss ich ein Benachrichtigungsfenster über allen anderen Fenstern anzeigen, während mein MainWindow minimiert ist, aber ohne den Fokus zu stehlen.

Also ich dies nur tun:

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

zu interagieren. Da das geladene Ereignis ausgelöst wird, nachdem das Fenster bereits aktiviert und angezeigt wurde, hört dies nicht auf, wenn der Fokus entfernt wird. – Wobbles

Verwandte Themen