获取附加属性的值而不是设置它
我有一些代码来设置文本框的焦点属性,但我实际上想要的是找出文本框当前是否具有键盘焦点,我需要从我的视图模型中确定这一点
public static class FocusExtension
{
public static bool GetIsFocused(DependencyObject obj)
{
return (bool)obj.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject obj, bool value)
{
obj.SetValue(IsFocusedProperty, value);
}
public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached
(
"IsFocused",
typeof(bool),
typeof(FocusExtension),
new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)
);
public static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uie = (UIElement)d;
if ((bool)e.NewValue)
{
uie.Focus();
}
}
}
xaml 是
<TextBox Text="{Binding Path=ClientCode}" c:FocusExtension.IsFocused="{Binding IsClientCodeFocused}" />
I have some code to set the focused property of a text box, but what i'm actually after is finding out if the text box currently has the keyboard focus, I need to determine this from my view model
public static class FocusExtension
{
public static bool GetIsFocused(DependencyObject obj)
{
return (bool)obj.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject obj, bool value)
{
obj.SetValue(IsFocusedProperty, value);
}
public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached
(
"IsFocused",
typeof(bool),
typeof(FocusExtension),
new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)
);
public static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var uie = (UIElement)d;
if ((bool)e.NewValue)
{
uie.Focus();
}
}
}
And the xaml is
<TextBox Text="{Binding Path=ClientCode}" c:FocusExtension.IsFocused="{Binding IsClientCodeFocused}" />
source of code
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您见过 FocusManager< /a>?您可以使用此对象获取/设置焦点。
have you seen the FocusManager? you can get/set focus using this object.
编辑
根据下面的注释,下面是一个附加属性的示例,该属性挂钩事件并更新绑定源。我将在我知道您需要进行修改的地方添加评论。希望它能为您指明正确的方向
可能有更好的方法来完成您想要做的事情,但如果没有,那么我希望这提供了一个良好的起点:)
Edit
Based on the comments below, here's an example of an attached property that hooks up an event and updates the source of a binding. I'll add comments where I know you'll need to make modifications. Hopefully it will point you in the right direction
There might be a better way of accomplishing what you're trying to do, but if not then I hope this provides a good starting point :)
在
OnIsFocusedPropertyChanged
处理程序中,您需要获取对正在设置的控件的引用并订阅其FocusChanged
事件,您可以在其中重新设置依赖项 pproperty 。确保在XAML
中将绑定模式设置为TwoWay
in your
OnIsFocusedPropertyChanged
handler, you need to get a reference to the control that it is being set on and subscribe to itsFocusChanged
event, where you can re-set the dependency pproperty. Make sure in yourXAML
you set the binding mode toTwoWay