76 lines
2.4 KiB
C#
76 lines
2.4 KiB
C#
// PasswordBoxHelper.cs
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace VideoConcat.Helpers
|
|
{
|
|
public static class PasswordBoxHelper
|
|
{
|
|
public static readonly DependencyProperty BoundPasswordProperty =
|
|
DependencyProperty.RegisterAttached("BoundPassword", typeof(string), typeof(PasswordBoxHelper),
|
|
new PropertyMetadata(string.Empty, OnBoundPasswordChanged));
|
|
|
|
public static readonly DependencyProperty BindPasswordProperty =
|
|
DependencyProperty.RegisterAttached("BindPassword", typeof(bool), typeof(PasswordBoxHelper),
|
|
new PropertyMetadata(false, OnBindPasswordChanged));
|
|
|
|
public static string GetBoundPassword(DependencyObject dp)
|
|
{
|
|
return (string)dp.GetValue(BoundPasswordProperty);
|
|
}
|
|
|
|
public static void SetBoundPassword(DependencyObject dp, string value)
|
|
{
|
|
dp.SetValue(BoundPasswordProperty, value);
|
|
}
|
|
|
|
public static bool GetBindPassword(DependencyObject dp)
|
|
{
|
|
return (bool)dp.GetValue(BindPasswordProperty);
|
|
}
|
|
|
|
public static void SetBindPassword(DependencyObject dp, bool value)
|
|
{
|
|
dp.SetValue(BindPasswordProperty, value);
|
|
}
|
|
|
|
private static void OnBoundPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is PasswordBox passwordBox)
|
|
{
|
|
passwordBox.Password = (string)e.NewValue;
|
|
}
|
|
}
|
|
|
|
private static void OnBindPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is not PasswordBox passwordBox)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ((bool)e.OldValue)
|
|
{
|
|
passwordBox.PasswordChanged -= PasswordChanged;
|
|
}
|
|
|
|
if ((bool)e.NewValue)
|
|
{
|
|
passwordBox.PasswordChanged += PasswordChanged;
|
|
}
|
|
}
|
|
|
|
private static void PasswordChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is PasswordBox passwordBox)
|
|
{
|
|
var boundPassword = GetBoundPassword(passwordBox);
|
|
if (passwordBox.Password != boundPassword)
|
|
{
|
|
SetBoundPassword(passwordBox, passwordBox.Password);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
} |