原文:
如何移动逻辑焦点、键盘焦点
‘在 WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。 本概述将详细介绍这些概念。 理解这些概念之间的区别对于创建具有可以获取焦点的多个区域的复杂应用程序是非常重要的。’ 摘自 Microsoft MSDN 焦点概述
一直以来,我写的项目都有键盘焦点的问题,比如 Click 了一个 Button 以后出现下次按回车还会触发 Click ,还有就是 TextBox 输入完成后想把键盘焦点转移到其他非 TextBox 输入框的控件上。
后面在解决这个问题的过程中看到一篇在 stackoverflow 上的提问,发现了可以使用 Keyboard 和 FocusManager 来移动焦点。
C#:
1 private void Focus(bool value) 2 { 3 if (value) 4 Dispatcher.BeginInvoke(DispatcherPriority.Input,new Action(delegate () 5 { 6 Keyboard.ClearFocus(); //清空键盘焦点 7 FocusManager.SetFocusedElement(this, null); //将逻辑焦点移动主窗体 8 Keyboard.Focus(this); //将键盘焦点已到主窗体 9 })); 10 }
引用
https://msdn.microsoft.com/zh-cn/library/aa969768(v=vs.110).aspx