WPF 中 PasswordBox 的数据绑定
时间:2021-07-01 10:21:17
帮助过:5人阅读
<summary>
/// 为PasswordBox控件的Password增加绑定功能
/// </summary>
public static class PasswordBoxHelper
{
public static readonly DependencyProperty PasswordProperty =
DependencyProperty.RegisterAttached("Password",
typeof(
string),
typeof(PasswordBoxHelper),
new FrameworkPropertyMetadata(
string.Empty, OnPasswordPropertyChanged));
public static readonly DependencyProperty AttachProperty =
DependencyProperty.RegisterAttached("Attach",
typeof(
bool),
typeof(PasswordBoxHelper),
new PropertyMetadata(
false, Attach));
private static readonly DependencyProperty IsUpdatingProperty =
DependencyProperty.RegisterAttached("IsUpdating",
typeof(
bool),
typeof(PasswordBoxHelper));
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 bool GetIsUpdating(DependencyObject dp)
{
return (
bool)dp.GetValue(IsUpdatingProperty);
}
private static void SetIsUpdating(DependencyObject dp,
bool value)
{
dp.SetValue(IsUpdatingProperty, value);
}
private static void OnPasswordPropertyChanged(DependencyObject sender,
DependencyPropertyChangedEventArgs e)
{
PasswordBox passwordBox = sender
as PasswordBox;
passwordBox.PasswordChanged -=
PasswordChanged;
if (!(
bool)GetIsUpdating(passwordBox))
{
passwordBox.Password = (
string)e.NewValue;
}
passwordBox.PasswordChanged +=
PasswordChanged;
}
private static void Attach(DependencyObject sender,
DependencyPropertyChangedEventArgs e)
{
PasswordBox passwordBox = sender
as PasswordBox;
if (passwordBox ==
null)
return;
if ((
bool)e.OldValue)
{
passwordBox.PasswordChanged -=
PasswordChanged;
}
if ((
bool)e.NewValue)
{
passwordBox.PasswordChanged +=
PasswordChanged;
}
}
private static void PasswordChanged(
object sender, RoutedEventArgs e)
{
PasswordBox passwordBox = sender
as PasswordBox;
SetIsUpdating(passwordBox, true);
SetPassword(passwordBox, passwordBox.Password);
SetIsUpdating(passwordBox, false);
}
}
然后在Xmal中PasswordBox可做如下绑定
<PasswordBox heplers:PasswordBoxHelper.Attach="True" heplers:PasswordBoxHelper.Password="{Binding Path=Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
WPF 中 PasswordBox 的数据绑定
标签: