如何防止新的WPF表单窃取焦点?

问题描述 投票:0回答:4

我编写了一个简单的 MSN 风格的程序,它将使用 WCF 发送和检索消息。主窗体包含一个文本框,用于输入要发送的消息。在后台,应用程序每隔几秒轮询一次服务器以获取新消息。当收到新消息时,会打开一个新窗口来显示它。这必须使用 Dispatcher 类在 UI 线程上完成。

问题在于,当显示新窗口时,焦点会从文本框移开,从而导致输入中断。这很烦人!在 MSN Messenger 中,可以在接收消息时继续输入自己的消息。是怎么做到的?

作为一种解决方法,我在文本框具有焦点时推迟新消息的弹出窗口,但应该有更好的方法!

.net wpf multithreading focus
4个回答
63
投票

答案很简单:由于 .NET 3.5 SP1 WPF 表单具有

ShowActivated
属性。将其设置为 false,这样标记的任何表单都不会再窃取焦点!


0
投票

显示另一个窗口后重新获得焦点的选项是:

// inside your window that should remain in focus
yourWindow.Show();       // to show second window
this.focus();      // regain focus back instantly

希望这有帮助,这是我在这里的第一篇文章!


-2
投票

您可以将窗口的 Focusable 属性设置为 false。


-2
投票

在我的应用程序中,我需要在主窗口最小化时在所有其他窗口之上显示一个通知窗口,但又不会窃取焦点。

所以我就这样做:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this.Topmost = true;
    this.Topmost = false;
}
© www.soinside.com 2019 - 2024. All rights reserved.