如何防止新的 WPF 表单窃取焦点?
Posted
技术标签:
【中文标题】如何防止新的 WPF 表单窃取焦点?【英文标题】:How to prevent a new WPF form from stealing focus? 【发布时间】:2009-09-21 20:00:32 【问题描述】:我编写了一个简单的MSN 风格的程序,它将使用WCF 发送和检索消息。主窗体包含一个文本框,用于输入要发送的消息。在后台,应用程序每隔几秒钟轮询一次服务器以获取新消息。当收到新消息时,会打开一个新窗口来显示它。这必须使用 Dispatcher 类在 UI 线程上完成。
问题是当显示新窗口时,焦点从 TextBox 上移开,从而导致输入中断。这很烦人!在MSN Messenger 中,可以在接收消息的同时继续输入您自己的消息。是怎么做到的?
作为一种解决方法,我在 TextBox 具有焦点时推迟弹出带有新消息的弹出窗口,但应该有更好的方法!
【问题讨论】:
有没有办法打开一个新窗口而不被聚焦? 【参考方案1】:答案很简单:因为 .NET 3.5 SP1 WPF 表单具有 ShowActivated
属性。将此设置为 false,任何被标记的表单都不会再窃取焦点!
【讨论】:
WPF 表单?那是什么?【参考方案2】:您可以将窗口的 Focusable 属性设置为 false。
【讨论】:
在这种情况下不是。用户必须能够与表单交互【参考方案3】:在我的应用程序中,我需要在所有其他窗口之上显示一个通知窗口,同时我的 MainWindow 被最小化,但不会窃取焦点。
所以我就这样做了:
private void Window_Loaded(object sender, RoutedEventArgs e)
this.Topmost = true;
this.Topmost = false;
【讨论】:
由于在窗口已经激活并显示后会触发加载的事件,因此如果窃取焦点,这不会停止。以上是关于如何防止新的 WPF 表单窃取焦点?的主要内容,如果未能解决你的问题,请参考以下文章