在WPF中,我有一个Window_KeyDown事件,当用户按下shift时,它会更改鼠标光标的形状。除非我点击了另一个应用程序,否则它会按预期工作。因此,我添加了一个像这样的Window_MouseEnter事件,以在鼠标重新进入我的应用程序时获取键盘焦点:
private void Window_MouseEnter(object sender, MouseEventArgs e)
{
IInputElement b = Keyboard.Focus(this);
this.Focus();
Debug.WriteLine(b + DateTime.Now.ToLongTimeString());
}
当鼠标进入应用程序时,我可以看到MouseEnter事件启动(带有调试行(,但在我点击应用程序之前,我的应用程序仍然不会收到键盘事件。
这很令人恼火,因为当鼠标进入我的应用程序中的控件时,鼠标光标会发生正确的变化,所以人们会期望它能正常工作,但移位鼠标功能直到点击后才能工作。
我错过了什么?
我发现秘密是Activate((方法。我把它放在MouseEnter函数中,它的副作用是强制整个应用程序显示其中一些是否被其他应用程序隐藏。
对于Activate((,不需要Focus((方法。