PasswordExtensions.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 
  2. namespace HistoryView.Helper;
  3. public class PassWordExtensions
  4. {
  5. public static string GetPassWord(DependencyObject obj)
  6. {
  7. return (string)obj.GetValue(PassWordProperty);
  8. }
  9. public static void SetPassWord(DependencyObject obj, string value)
  10. {
  11. obj.SetValue(PassWordProperty, value);
  12. }
  13. public static readonly DependencyProperty PassWordProperty =
  14. DependencyProperty.RegisterAttached("PassWord", typeof(string), typeof(PassWordExtensions), new PropertyMetadata(string.Empty, OnPassWordPropertyChanged));
  15. static void OnPassWordPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
  16. {
  17. if (sender is not PasswordBox passWord)
  18. return;
  19. passWord.Password = (string)e.NewValue;
  20. MethodInfo? method = passWord.GetType().GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic);
  21. method?.Invoke(passWord, [passWord.Password.Length, 0]);
  22. }
  23. }
  24. public class PasswordBehavior : Behavior<PasswordBox>
  25. {
  26. protected override void OnAttached()
  27. {
  28. base.OnAttached();
  29. AssociatedObject.PasswordChanged += AssociatedObject_PasswordChanged;
  30. }
  31. /// <summary>
  32. /// 读内容与更新内容
  33. /// </summary>
  34. /// <param name="sender"></param>
  35. /// <param name="e"></param>
  36. private void AssociatedObject_PasswordChanged(object sender, RoutedEventArgs e)
  37. {
  38. if (sender is not PasswordBox passWord)
  39. return;
  40. if (passWord.Password == PassWordExtensions.GetPassWord(passWord))
  41. return;
  42. PassWordExtensions.SetPassWord(passWord, passWord.Password);
  43. }
  44. protected override void OnDetaching()
  45. {
  46. base.OnDetaching();
  47. AssociatedObject.PasswordChanged -= AssociatedObject_PasswordChanged;
  48. }
  49. }