привязка фокуса элемента с прикрепленным свойством? - PullRequest
2 голосов
/ 03 декабря 2009

Я пытаюсь привязать фокус для моего элемента управления к свойству модели представления, например:

 public class Focus
{
    public static readonly DependencyProperty HasFocusProperty = DependencyProperty.RegisterAttached("HasFocus",
                                                                                                             typeof(bool),
                                                                                                             typeof(Focus),
                                                                                                             new PropertyMetadata(false, HandleHasFocusChanged),
                                                                                                             null
                                                                                                            );

    private static void HandleHasFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var uiElement = d as UIElement;
        var value = (bool)e.NewValue;

        if (value)
        {
            FocusManager.SetFocusedElement(uiElement, uiElement);
        }
    }

    public static bool GetHasFocus(UIElement obj)
    {
        return (bool)obj.GetValue(HasFocusProperty);
    }

    public static void SetHasFocus(UIElement obj, bool value)
    {
        obj.SetValue(HasFocusProperty, value);
    }
}

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

Кто-нибудь знает, что я делаю неправильно, или даже лучший способ сделать то, что я пытаюсь достичь?

1 Ответ

1 голос
/ 04 декабря 2009

Вероятно, разница между логическим фокусом и фокусом клавиатуры кусает вас. Вы можете прочитать об этом здесь . Обратите особое внимание на часть о фокусе. Вы реализовали код для установки логического фокуса на свой пользовательский элемент управления, когда для свойства HasFocus установлено значение true, но вы ничего не делаете, когда для него установлено значение false. В этом случае логический фокус останется там, где он есть. С другой стороны, вы не подключили обработчик событий для события lostfocus пользовательского элемента управления. Это означает, что ваше свойство HasFocus снова не будет затронуто, когда элемент управления потеряет фокус.

...