在WPF中,有两种方法可以将焦点设置为元素.
您可以调用input元素的.Focus()方法,也可以使用input元素作为参数调用Keyboard.Focus().
// first way: item.Focus(); // alternate way: Keyboard.Focus(item);
这两者有什么区别?在某些情况下,是否有特殊原因使用其中一个而不是另一个?
到目前为止,我注意到没有任何区别 - 无论使用哪种方法,该项目始终具有逻辑焦点以及键盘焦点.
首先要做的事之一item.Focus()
是打电话Keyboard.Focus( this )
.如果失败了,那就调用FocusManager
,就像decasteljau回答的那样.
以下内容从Reflector中的 disassambler视图中复制.
这来自UIElement
(UIElement3D
是相同的):
public bool Focus() { if (Keyboard.Focus(this) == this) { return true; } if (this.Focusable && this.IsEnabled) { DependencyObject focusScope = FocusManager.GetFocusScope(this); if (FocusManager.GetFocusedElement(focusScope) == null) { FocusManager.SetFocusedElement(focusScope, this); } } return false; }
这来自ContentElement
:
public bool Focus() { return (Keyboard.Focus(this) == this); }
根据MSDN上的WPF文档:
在WPF中,有两个与焦点相关的主要概念:键盘焦点和逻辑焦点.键盘焦点是指接收键盘输入的元素,而逻辑焦点是指具有焦点的焦点范围中的元素.
和
具有键盘焦点的元素也将具有逻辑焦点,但具有逻辑焦点的元素不一定具有键盘焦点.