2009-09-21 77 views
17

我寫了一個簡單的MSN風格的程序,它將使用WCF發送和檢索消息。主窗體包含一個用於鍵入要發送的消息的文本框。在後臺應用程序每隔幾秒輪詢一次服務器以獲取新消息。當收到新消息時,打開一個新窗口顯示它。這必須在使用Dispatcher類的UI線程上完成。如何防止新的WPF表單被盜取焦點?

問題是,當顯示新窗口時,焦點從文本框移開,因此打字中斷。這非常煩人!在MSN Messenger中可以繼續輸入自己的信息,同時接收信息。它是如何完成的?

作爲一種解決方法,我在TextBox有焦點時推遲彈出窗口,但應該有更好的方法!

+1

有沒有辦法打開而不會被集中在一個新的窗口? – 2009-09-21 20:03:06

回答

46

答案很簡單:由於.NET 3.5 SP1 WPF窗體具有ShowActivated屬性。將其設置爲false,這樣標記的任何表單都不會再無法竊取焦點!

+8

WPF表單?那是什麼? – 2014-07-08 21:25:00

-2

您可以將窗口的Focusable屬性設置爲false。

+1

不是這種情況。用戶必須能夠與表單交互 – Dabblernl 2009-09-22 11:37:11

-1

在我的應用程序中,我需要在所有其他窗口的頂部顯示通知窗口,同時將我的MainWindow最小化,但不會竊取焦點。

所以我只是這樣做:

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

由於加載的事件在窗口已被激活並顯示後觸發,因此如果偷竊焦點不會停止。 – Wobbles 2017-03-03 11:59:16