Files
qhmes/yy-admin-master/YY.Admin.Core/FluentValidation/PasswordBoxHelper.cs

82 lines
2.6 KiB
C#
Raw Normal View History

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);
}
}
}
}