82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
|
|
using System.Windows;
|
|||
|
|
using System.Windows.Controls;
|
|||
|
|
|
|||
|
|
namespace YY.Admin.Core.FluentValidation
|
|||
|
|
{
|
|||
|
|
public static class PasswordBoxHelper
|
|||
|
|
{
|
|||
|
|
public static readonly DependencyProperty PasswordProperty =
|
|||
|
|
DependencyProperty.RegisterAttached(
|
|||
|
|
"Password",
|
|||
|
|
typeof(string),
|
|||
|
|
typeof(PasswordBoxHelper),
|
|||
|
|
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPasswordPropertyChanged));
|
|||
|
|
|
|||
|
|
public static readonly DependencyProperty AttachProperty =
|
|||
|
|
DependencyProperty.RegisterAttached(
|
|||
|
|
"Attach",
|
|||
|
|
typeof(bool),
|
|||
|
|
typeof(PasswordBoxHelper),
|
|||
|
|
new System.Windows.PropertyMetadata(false, OnAttachChanged));
|
|||
|
|
|
|||
|
|
public static void SetAttach(DependencyObject dp, bool value)
|
|||
|
|
{
|
|||
|
|
dp.SetValue(AttachProperty, value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static bool GetAttach(DependencyObject dp)
|
|||
|
|
{
|
|||
|
|
return (bool)dp.GetValue(AttachProperty);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static string GetPassword(DependencyObject dp)
|
|||
|
|
{
|
|||
|
|
return (string)dp.GetValue(PasswordProperty);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void SetPassword(DependencyObject dp, string value)
|
|||
|
|
{
|
|||
|
|
dp.SetValue(PasswordProperty, value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void OnAttachChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (sender is PasswordBox passwordBox)
|
|||
|
|
{
|
|||
|
|
if ((bool)e.OldValue)
|
|||
|
|
{
|
|||
|
|
passwordBox.PasswordChanged -= PasswordChanged;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ((bool)e.NewValue)
|
|||
|
|
{
|
|||
|
|
passwordBox.PasswordChanged += PasswordChanged;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void OnPasswordPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (sender is PasswordBox passwordBox)
|
|||
|
|
{
|
|||
|
|
// 防止无限循环
|
|||
|
|
passwordBox.PasswordChanged -= PasswordChanged;
|
|||
|
|
|
|||
|
|
if (passwordBox.Password != (e.NewValue ?? ""))
|
|||
|
|
{
|
|||
|
|
passwordBox.Password = e.NewValue?.ToString() ?? "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
passwordBox.PasswordChanged += PasswordChanged;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void PasswordChanged(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (sender is PasswordBox passwordBox)
|
|||
|
|
{
|
|||
|
|
SetPassword(passwordBox, passwordBox.Password);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|