2009-09-21 13 views
17

Napisałem prosty program w stylu MSN, który będzie wysyłać i pobierać wiadomości za pomocą WCF. Główny formularz zawiera pole tekstowe do wpisania wiadomości do wysłania. W tle aplikacja odpytuje serwer co kilka sekund w poszukiwaniu nowych wiadomości. Po otrzymaniu nowej wiadomości otworzy się nowe okno, aby ją wyświetlić. Należy to zrobić w wątku interfejsu użytkownika przy użyciu klasy Dispatcher.Jak zapobiec kradzieży fokusowi przez nowy formularz WPF?

Problem polega na tym, że po wyświetleniu nowego okna ostrość jest odsunięta od pola tekstowego, co powoduje przerwanie pisania. To bardzo denerwujące! W MSN Messenger można kontynuować pisanie własnej wiadomości podczas jej odbierania. Jak to jest zrobione?

Jako obejście problemu odkładałem okienko z nową wiadomością, gdy TextBox ma fokus, ale powinien być lepszy sposób!

+1

Czy istnieje sposób, aby otworzyć nowe okno bez niego fermy? –

Odpowiedz

46

Odpowiedź jest prosta: Od .NET 3.5 SP1 formularze WPF mają właściwość ShowActivated. Ustaw to na false i każda forma w ten sposób oznaczona nie będzie już kradła żadnego skupienia!

+8

Formularz WPF? Co to jest? –

-2

Można ustawić właściwość aktywowania okna na wartość false.

+1

Nie w tym przypadku. Użytkownik musi mieć możliwość interakcji z formularzem – Dabblernl

-1

W mojej aplikacji muszę pokazać okno powiadomień na górze wszystkich innych okien, podczas gdy moje MainWindow jest zminimalizowane, ale bez kradzieży fokusa.

Więc po prostu to zrobić:

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

Ponieważ załadowane zdarzenie jest wywoływane po tym, jak okno jest już aktywne i pokazane, nie zatrzymuje się, jeśli nie zostanie ukradzione. – Wobbles

Powiązane problemy