Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Keyboard.Focus(item)和item.Focus()之间有什么区别?_.net_Wpf - Fatal编程技术网

.net Keyboard.Focus(item)和item.Focus()之间有什么区别?

.net Keyboard.Focus(item)和item.Focus()之间有什么区别?,.net,wpf,.net,Wpf,在WPF中,有两种方法可以设置元素的焦点。 可以调用输入元素的.Focus()方法,也可以使用输入元素作为参数调用Keyboard.Focus() // first way: item.Focus(); // alternate way: Keyboard.Focus(item); 这两者有什么区别?在某些情况下,是否有特殊原因使用其中一种而不是另一种? 到目前为止,我没有注意到任何区别-无论我使用何种方法,该项始终具有逻辑焦点和键盘焦点。根据: 在WPF中,有两个与焦点相关的主要概念:键盘焦

在WPF中,有两种方法可以设置元素的焦点。
可以调用输入元素的.Focus()方法,也可以使用输入元素作为参数调用Keyboard.Focus()

// first way:
item.Focus();
// alternate way:
Keyboard.Focus(item);
这两者有什么区别?在某些情况下,是否有特殊原因使用其中一种而不是另一种?
到目前为止,我没有注意到任何区别-无论我使用何种方法,该项始终具有逻辑焦点和键盘焦点。

根据:

在WPF中,有两个与焦点相关的主要概念:键盘焦点和逻辑焦点。键盘焦点是指接收键盘输入的元素,逻辑焦点是指焦点作用域中具有焦点的元素

具有键盘焦点的元素也将具有逻辑焦点,但具有逻辑焦点的元素不一定具有键盘焦点


另外,您可能想知道item.Focus()相当于调用:

DependencyObject focusScope = FocusManager.GetFocusScope(item);
if (FocusManager.GetFocusedElement(focusScope) == null)
{
   FocusManager.SetFocusedElement(focusScope, item);
}

item.Focus()
首先要做的事情之一是调用
Keyboard.Focus(this)
。如果失败,那么它会调用
FocusManager
,正如decasteljau所回答的那样

以下内容是从中的disassambler视图复制的

这是来自
UIElement
UIElement3D
相同):

这是来自
ContentElement

public bool Focus()
{
    return (Keyboard.Focus(this) == this);
}

所以最好使用Keyboard.Focus()?奇怪的是,当我使用item.Focus()时,键盘的焦点也总是在这个项目上。其他人说的和我差不多,只是代码示例(耶!)。不知道为什么这被否决了…我也没有被否决的票。逻辑焦点和键盘焦点之间的区别是好的信息。
setFocusedElement
只是设置逻辑焦点
Focus()
可以同时执行键盘和逻辑操作
public bool Focus()
{
    return (Keyboard.Focus(this) == this);
}