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

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


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

最佳答案

item.Focus()做的第一件事之一就是调用Keyboard.Focus( this )。如果失败,则按decasteljau的回答呼叫FocusManager

以下内容是从Reflector的反骚扰者视图复制的。

这是来自UIElementUIElement3D相同):

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);
}

关于.net - Keyboard.Focus(item)和item.Focus()有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/197088/

10-13 02:27