【问题标题】:How to prevent a new WPF form from stealing focus?如何防止新的 WPF 表单窃取焦点?
【发布时间】:2009-09-21 20:00:32
【问题描述】:

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

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

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

【问题讨论】:

  • 有没有办法打开一个新窗口而不被聚焦?

标签: .net wpf multithreading focus


【解决方案1】:

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

【讨论】:

  • WPF 表单?那是什么?
【解决方案2】:

您可以将窗口的 F​​ocusable 属性设置为 false。

【讨论】:

  • 在这种情况下不是。用户必须能够与表单交互
【解决方案3】:

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

所以我就这样做了:

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

【讨论】:

  • 由于在窗口已经激活并显示后会触发加载的事件,因此如果窃取焦点,这不会停止。
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 2011-02-18
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多