WPF中附加属性
在WPF当中,大部分控件,只要是可以绑定数据的Binding ,就是属于依赖属性,很方便进行数据的操作,但是的,有些控件是没有的的比如,PassWordBox,这时候就需要我们自己去写一个帮助类,让PassWordBox变成可以直接使用的bingding的
直接上代码
public class PassWordHelper
{
public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached(
"Password", typeof(string),
typeof(PassWordHelper),
new PropertyMetadata(new PropertyChangedCallback(OnPropertyChanged)));
public static readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached(
"Attach", typeof(string),
typeof(PassWordHelper),
new PropertyMetadata(new PropertyChangedCallback(OnAttachChanged)));
static bool _isUpdating = false;
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PasswordBox pb = (d as PasswordBox);
pb.PasswordChanged -= Pb_PasswordChanged;
if (!_isUpdating)
{
(d as PasswordBox).Password = e.NewValue.ToString();
pb.PasswordChanged += Pb_PasswordChanged;
}
}
private static void Pb_PasswordChanged(object sender, RoutedEventArgs e)
{
PasswordBox pb = sender as PasswordBox;
_isUpdating = false;
SetPassword(pb, pb.Password);
_isUpdating = true;
}
public static string GetPassword(DependencyObject d)
{
return (string)d.GetValue(PasswordProperty);
}
public static void SetPassword(DependencyObject d, string value)
{
d.SetValue(PasswordProperty, value);
}
public static void OnAttachChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PasswordBox pb = (d as PasswordBox);
pb.PasswordChanged += Pb_PasswordChanged;
}
public static string GetAttach(DependencyObject d)
{
return (string)d.GetValue(AttachProperty);
}
public static void SetAttach(DependencyObject d, string value)
{
d.SetValue(AttachProperty, value);
}
}
在xaml中的使用
先进行类库引用
xmlns:passwordHelper="clr-namespace:Wpf.Common;assembly=Wpf.Common"
<PasswordBox passwordHelper:PassWordHelper.Password="{Binding PassWord,Mode=TwoWay}" passwordHelper:PassWordHelper.Attach="True"></PasswordBox>