从其他应用程序进入时应用程序没有获得键盘焦点

Posted

技术标签:

【中文标题】从其他应用程序进入时应用程序没有获得键盘焦点【英文标题】:App not getting keyboard focus when entering from other app 【发布时间】:2020-06-11 21:17:19 【问题描述】:

在 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 事件触发(使用调试行),但我的应用程序在我单击应用程序之前仍然没有收到键盘事件。

这很烦人,因为当鼠标进入我的应用程序中的控件时,鼠标光标会正确更改,所以人们会期望事情能正常工作,但 shift-mouse 功能在单击后才会起作用。

我错过了什么?

【问题讨论】:

【参考方案1】:

我发现秘诀是 Activate() 方法。我把它放在 MouseEnter 函数中,它的副作用是强制整个应用程序显示其中一些是否被其他应用程序隐藏。

使用 Activate(),不需要 Focus() 方法。

【讨论】:

以上是关于从其他应用程序进入时应用程序没有获得键盘焦点的主要内容,如果未能解决你的问题,请参考以下文章

当 TextInput 有焦点时,如何从键盘后面自动滑出窗口?

表单即将获得焦点时的事件?

单击“TextInput”对象后在 Kivy 中重新获得键盘焦点

当嵌入式 ActiveX 控件接收并失去键盘焦点时如何获得通知?

安卓onKeyDown事件 重新获取焦点

如果当焦点处于其他应用程序时,如何拦截键盘事件?