我有一个WPF应用程序,它通过套接字连接与C ++ MFC应用程序通信。如果用户按下C ++应用程序中的特定按钮,则会显示一个新的WPF窗口。
以下是调用以启动WPF窗口的代码:
var window = new Window();
window.Topmost = true;
window.Show();
window.Activate();
window.Topmost = false;
在某些机器上,以这种方式显示的第一个窗口(以及仅第一个窗口)将不具有键盘焦点。它将在C ++应用程序的前面,但C ++应用程序仍将具有键盘焦点。我还能做些什么来强制WPF窗口每次都能获得键盘焦点吗?
答案 0 :(得分:2)
试试这个:
var window = new Window();
window.Show();
window.Activate();
window.Focus();
window.Topmost = true;
window.Topmost = false;
答案 1 :(得分:1)
您是否尝试过Focusable
上的Window
设置为true
,然后调用window.Focus()
?
答案 2 :(得分:1)
事实证明window.Activate()
正在返回false
。看看这种方法documentation,它说,
确定窗口是否已激活的规则与Win32 SetForegroundWindow函数(User32.dll)使用的规则相同。
SetForegroundWindow的文档,然后声明:
可以设置前台窗口的进程可以通过调用AllowSetForegroundWindow函数启用另一个进程来设置前台窗口。
因此,解决方案是让C ++应用程序使用AllowSetForegroundWindow函数为WPF应用程序授予设置前景窗口的权限。