2

我正在尝试将我的控件的焦点绑定到视图模型上的属性,如下所示:

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

这适用于第一个焦点,但之后它似乎根本没有任何影响

任何人都知道我做错了什么,甚至是更好的方法来做我想要实现的目标?

4

1 回答 1

1

逻辑焦点和键盘焦点之间的区别可能会咬你。你可以在这里阅读。特别注意关于焦点范围的部分。当 HasFocus 属性设置为 true 时,您已经实现了将逻辑焦点设置到用户控件的代码,但当它设置为 false 时,您什么也不做。在这种情况下,逻辑焦点将保持在原处。另一方面,您还没有为用户控件的 lostfocus 事件连接事件处理程序。这意味着当控件失去焦点时,您的 HasFocus 属性将再次不受影响。

于 2009-12-03T22:14:03.317 回答