Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何防止新WPF表单窃取焦点?_.net_Wpf_Multithreading_Focus - Fatal编程技术网

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

.net 如何防止新WPF表单窃取焦点?,.net,wpf,multithreading,focus,.net,Wpf,Multithreading,Focus,我已经编写了一个简单风格的程序,将使用发送和检索消息。主窗体包含一个文本框,用于键入要发送的消息。在后台,应用程序每隔几秒钟轮询服务器以查找新消息。当收到新消息时,会打开一个新窗口来显示它。这必须使用Dispatcher类在UI线程上完成 问题是,当显示新窗口时,焦点会从文本框移开,从而中断键入。这太烦人了!在这种情况下,您可以在接收信息时继续键入自己的信息。怎么做的 作为一种解决方法,当文本框有焦点时,我会推迟弹出新消息,但应该有更好的方法 答案很简单:因为.NET 3.5 SP1 WPF表单

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

问题是,当显示新窗口时,焦点会从文本框移开,从而中断键入。这太烦人了!在这种情况下,您可以在接收信息时继续键入自己的信息。怎么做的


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

答案很简单:因为.NET 3.5 SP1 WPF表单有一个
ShowActivated
属性。将此设置为false,这样标记的任何形式都不会再窃取任何焦点

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

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

所以我就这么做:

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

有没有办法在不聚焦的情况下打开一个新窗口?在这种情况下没有。用户必须能够与formA WPF表单交互?这是什么?因为加载的事件在窗口已经激活并显示后激发,所以如果从窃取焦点开始,这不会停止。