绑定元素焦点与附加属性?

时间:2009-12-03 17:32:08

标签: wpf binding mvvm focus attached-properties

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

 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 个答案:

答案 0 :(得分:1)

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