如何防止新的WPF窗体抢占焦点?

27
我写了一个简单的MSN风格程序,使用WCF发送和检索消息。主窗体包含一个文本框,用于输入要发送的消息。在后台,应用程序每隔几秒钟轮询服务器以获取新消息。当接收到新消息时,将打开一个新窗口来显示它。这必须在UI线程上使用Dispatcher类完成。
问题是当新窗口显示时,焦点从文本框转移,导致打字被中断。这非常令人烦恼!在MSN Messenger中,可以在接收消息时继续输入自己的消息。这是如何实现的?
作为解决方法,我推迟了具有焦点的文本框的弹出窗口,但应该有更好的方法!

1
有没有一种方法可以打开一个新窗口而不让它成为焦点? - matt b
3个回答

64
答案很简单:自从.NET 3.5 SP1以来,WPF表单拥有一个ShowActivated属性。将其设置为false,任何标记为这样的表单将不再窃取焦点!

16
一个 WPF 表单?那是什么? - Scott Solmer

-2
你可以将窗口的 Focusable 属性设置为 false。

2
不是这种情况。用户必须能够与表单进行交互。 - Dabblernl

-2
在我的应用程序中,当我的主窗口最小化时,我需要在所有其他窗口的顶部显示一个通知窗口,但不会夺取焦点。
所以我只需这样做:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.Topmost = true;
    this.Topmost = false;
}

1
由于加载事件在窗口已经激活和显示后触发,因此这并不会阻止它窃取焦点。 - Wobbles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接