В чем разница между Keyboard.Focus(item) и item.Focus()?

В WPF есть два способа установить фокус на элемент.
Вы можете либо вызвать метод.Focus() элемента input, либо вызвать Keyboard.Focus() с элементом input в качестве параметра.

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

В чем разница между этими двумя? Существуют ли особые причины для использования одного из них вместо другого в некоторых случаях?
До сих пор я не заметил никакой разницы - какой бы метод я ни использовал, предмет всегда получал логический фокус, а также фокус клавиатуры.

3 ответа

Решение

Одна из первых вещей, которые item.Focus() делает это вызов Keyboard.Focus( this ), Если это не удается, то он звонит FocusManager, как ответил Декастеляу.

Следующее скопировано из вида дизассемблера в Reflector.

Это из 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);
}

Согласно документации WPF на MSDN:

В WPF есть две основные концепции, которые относятся к фокусу: клавиатурный фокус и логический фокус. Фокус клавиатуры относится к элементу, который получает ввод с клавиатуры, а логический фокус относится к элементу в области фокусировки, которая имеет фокус.

а также

Элемент с фокусом клавиатуры также будет иметь логический фокус, но элемент с логическим фокусом не обязательно должен иметь фокус клавиатуры.

Кроме того, вы можете знать, что item.Focus() является эквивалентом вызова:

DependencyObject focusScope = FocusManager.GetFocusScope(item);
if (FocusManager.GetFocusedElement(focusScope) == null)
{
   FocusManager.SetFocusedElement(focusScope, item);
}
Другие вопросы по тегам