当前位置:  开发笔记 > 编程语言 > 正文

什么是Keyboard.Focus(item)和item.Focus()之间的区别?

如何解决《什么是Keyboard.Focus(item)和item.Focus()之间的区别?》经验,为你挑选了2个好方法。

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

// first way:
item.Focus();
// alternate way:
Keyboard.Focus(item);

这两者有什么区别?在某些情况下,是否有特殊原因使用其中一个而不是另一个?
到目前为止,我注意到没有任何区别 - 无论使用哪种方法,该项目始终具有逻辑焦点以及键盘焦点.



1> Joel B Fant..:

首先要做的事之一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);
}



2> Tomalak..:

根据MSDN上的WPF文档:

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

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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有