WPF PasswordBox 自定义依赖属性实现绑定

1、直接上代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class PasswordHelper
   {
       public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached("Password", typeof(string), typeof(PasswordHelper),
           new PropertyMetadata(new PropertyChangedCallback(OnPropertyChanged)));
 
       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 readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached("Attach", typeof(string), typeof(PasswordHelper),
           new PropertyMetadata(new PropertyChangedCallback(OnAttachChanged)));
 
       public static string GetAttach(DependencyObject d)
       {
           return (string)d.GetValue(AttachProperty);
       }
       public static void SetAttach(DependencyObject d, string value)
       {
           d.SetValue(AttachProperty, value);
       }
 
       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 OnAttachChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
       {
           PasswordBox pb = (d as PasswordBox);
           pb.PasswordChanged += Pb_PasswordChanged;
       }
 
       private static void Pb_PasswordChanged(object sender, RoutedEventArgs e)
       {
           PasswordBox pb = (sender as PasswordBox);
           _isUpdating = true;
           SetPassword(pb, pb.Password);
           _isUpdating = false;
       }
   }

 

  在需要使用的窗口引用

 xmlns:pwdHelper="clr-namespace:_判图.Base"

  <PasswordBox  Grid.Row="1"  Height="40" FontSize="16" pwdHelper:PasswordHelper.Password="{Binding loginModel.password}"  Foreground="#555" Style="{DynamicResource PasswordBoxStyle}"></PasswordBox>

 

posted @   ¥东方不败  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示