0%

public 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``);

}

}