我编写了一个简单的 MSN 风格的程序,它将使用 WCF 发送和检索消息。主窗体包含一个文本框,用于输入要发送的消息。在后台,应用程序每隔几秒轮询一次服务器以获取新消息。当收到新消息时,会打开一个新窗口来显示它。这必须使用 Dispatcher 类在 UI 线程上完成。
问题在于,当显示新窗口时,焦点会从文本框移开,从而导致输入中断。这很烦人!在 MSN Messenger 中,可以在接收消息时继续输入自己的消息。是怎么做到的?
作为一种解决方法,我在文本框具有焦点时推迟新消息的弹出窗口,但应该有更好的方法!
答案很简单:由于 .NET 3.5 SP1 WPF 表单具有
ShowActivated
属性。将其设置为 false,这样标记的任何表单都不会再窃取焦点!
显示另一个窗口后重新获得焦点的选项是:
// inside your window that should remain in focus
yourWindow.Show(); // to show second window
this.focus(); // regain focus back instantly
希望这有帮助,这是我在这里的第一篇文章!
您可以将窗口的 Focusable 属性设置为 false。
在我的应用程序中,我需要在主窗口最小化时在所有其他窗口之上显示一个通知窗口,但又不会窃取焦点。
所以我就这样做:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Topmost = true;
this.Topmost = false;
}