我正在尝试将我的控件的焦点绑定到视图模型上的属性,如下所示:
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);
}
}
这适用于第一个焦点,但之后它似乎没有任何影响
任何人都知道我做错了什么,甚至是更好的方法去做我想要达到的目标?
答案 0 :(得分:1)
逻辑焦点和键盘焦点之间的区别可能正在咬你。你可以阅读它here。特别注意关注范围的部分。 当HasFocus属性设置为true时,您已实现代码将逻辑焦点设置为用户控件,但在将其设置为false时则不执行任何操作。在这种情况下,逻辑焦点将保持原样。 另一方面,您还没有为用户控件的lostfocus事件连接事件处理程序。这意味着当控件失去焦点时,HasFocus属性将再次不受影响。