WPF中将password非依赖属性转化为依赖属性
2019-05-31 10:40 .net小跟班(杜) 阅读(446) 评论(0) 编辑 收藏 举报1封装一个PasswordBoxBindingHelper
public static class PasswordBoxBindingHelper { public static bool GetIsPasswordBindingEnabled(DependencyObject obj) { return (bool)obj.GetValue(IsPasswordBindingEnabledProperty); } public static void SetIsPasswordBindingEnabled(DependencyObject obj, bool value) { obj.SetValue(IsPasswordBindingEnabledProperty, value); } public static readonly DependencyProperty IsPasswordBindingEnabledProperty = DependencyProperty.RegisterAttached("IsPasswordBindingEnabled", typeof(bool), typeof(PasswordBoxBindingHelper), new UIPropertyMetadata(false, OnIsPasswordBindingEnabledChanged)); private static void OnIsPasswordBindingEnabledChanged(DependencyObject obj,DependencyPropertyChangedEventArgs e) { var passwordBox = obj as PasswordBox; if (passwordBox != null) { passwordBox.PasswordChanged -= PasswordBoxPasswordChanged; if ((bool)e.NewValue) { passwordBox.PasswordChanged += PasswordBoxPasswordChanged; } } } //when the passwordBox's password changed, update the buffer static void PasswordBoxPasswordChanged(object sender, RoutedEventArgs e) { var passwordBox = (PasswordBox)sender; if (!String.Equals(GetBindedPassword(passwordBox), passwordBox.Password)) { SetBindedPassword(passwordBox, passwordBox.Password); } } public static string GetBindedPassword(DependencyObject obj) { return (string)obj.GetValue(BindedPasswordProperty); } public static void SetBindedPassword(DependencyObject obj, string value) { obj.SetValue(BindedPasswordProperty, value); } public static readonly DependencyProperty BindedPasswordProperty = DependencyProperty.RegisterAttached("BindedPassword", typeof(string), typeof(PasswordBoxBindingHelper), new UIPropertyMetadata(string.Empty, OnBindedPasswordChanged)); //when the buffer changed, upate the passwordBox's password private static void OnBindedPasswordChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { var passwordBox = obj as PasswordBox; if (passwordBox != null) { passwordBox.Password = e.NewValue == null ? string.Empty : e.NewValue.ToString(); } } }
2界面XAML进行属性绑定
<PasswordBox Helpers:PasswordBoxBindingHelper.IsPasswordBindingEnabled="True" Grid.Row="4" Grid.Column="1" Height="27" Margin="208,6.6,213.6,6.4" Helpers:PasswordBoxBindingHelper.BindedPassword= "{Binding Path=Password, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" PasswordChanged="TxtPassword_PasswordChanged"/>