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