【问题标题】:Force Window to have Focus When Opened强制窗口在打开时具有焦点
【发布时间】:2014-01-09 23:19:54
【问题描述】:

我有一个 WPF 应用程序,它通过套接字连接与 C++ MFC 应用程序进行通信。如果用户在 C++ 应用程序中按下特定按钮,则会显示一个新的 WPF 窗口。

这是启动 WPF 窗口时调用的代码:

var window = new Window();
window.Topmost = true;
window.Show();
window.Activate();
window.Topmost = false;

在某些机器上,以这种方式显示的第一个窗口(并且只有第一个窗口)没有键盘焦点。它将位于 C++ 应用程序的前面,但 C++ 应用程序仍将具有键盘焦点。我还能做些什么来强制 WPF 窗口每次都获得键盘焦点?

【问题讨论】:

  • window.Focus() 应该为你做。
  • window.Focus() 每次都返回 false。
  • window.Focus() 返回一个布尔值,标识该窗口是否具有焦点。我的猜测是当你调用Focus() 时你的窗口没有焦点,所以它总是错误的.. 给你的窗口焦点,使用window.Focus() = true;

标签: c# wpf windows


【解决方案1】:

试试这个:

var window = new Window();    
window.Show();
window.Activate();
window.Focus();
window.Topmost = true;
window.Topmost = false;

【讨论】:

    【解决方案2】:

    您是否尝试过将Window 上的属性Focusable 设置为true,然后再调用window.Focus()

    【讨论】:

      【解决方案3】:

      原来window.Activate() 正在返回false。看看那个方法的documentation,它说,

      判断窗口是否被激活的规则与Win32 SetForegroundWindow函数(User32.dll)使用的规则相同。

      SetForegroundWindow 的文档,然后声明:

      一个可以设置前台窗口的进程可以通过调用AllowSetForegroundWindow函数让另一个进程设置前台窗口。

      所以解决方案是让 C++ 应用使用 AllowSetForegroundWindow 函数来授予 WPF 应用设置前景窗口的权限。

      【讨论】:

        猜你喜欢
        • 2015-11-02
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 2011-07-07
        • 1970-01-01
        • 2011-09-11
        相关资源
        最近更新 更多