2009-12-03 98 views
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); 
    } 
} 

这适用于第一焦点,但随后后,它似乎没有任何影响可言

有人知道我做错了什么,或者甚至有更好的方法去做我想要达到的目标吗?

回答

1

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

+0

我不需要让它失去焦点,我会稍后实施。我删除了LostFocus事件处理以简化我的代码。我会着眼于焦点范围的事情,谢谢 – 2009-12-07 09:54:01

+0

太棒了,我现在明白wpf的重点..我不知道为什么他们这样做了吗?旧的重点系统出了什么问题? – 2009-12-07 12:27:36