From 1f4e14b2e973ee7de337fd4866d9a5ceff5cb6d1 Mon Sep 17 00:00:00 2001 From: Lucas Faria Mendes Date: Mon, 30 Mar 2026 10:38:18 -0300 Subject: chore: location --- .../Helpers/PasswordBoxAssistant.cs | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Codemerx/Gestor.Application/Helpers/PasswordBoxAssistant.cs (limited to 'Codemerx/Gestor.Application/Helpers/PasswordBoxAssistant.cs') diff --git a/Codemerx/Gestor.Application/Helpers/PasswordBoxAssistant.cs b/Codemerx/Gestor.Application/Helpers/PasswordBoxAssistant.cs new file mode 100644 index 0000000..8944bc7 --- /dev/null +++ b/Codemerx/Gestor.Application/Helpers/PasswordBoxAssistant.cs @@ -0,0 +1,95 @@ +using System; +using System.Windows; +using System.Windows.Controls; + +namespace Gestor.Application.Helpers +{ + public static class PasswordBoxAssistant + { + public readonly static DependencyProperty BoundPassword; + + public readonly static DependencyProperty BindPassword; + + private readonly static DependencyProperty UpdatingPassword; + + static PasswordBoxAssistant() + { + PasswordBoxAssistant.BoundPassword = DependencyProperty.RegisterAttached("BoundPassword", typeof(string), typeof(PasswordBoxAssistant), new PropertyMetadata(string.Empty, new PropertyChangedCallback(PasswordBoxAssistant.OnBoundPasswordChanged))); + PasswordBoxAssistant.BindPassword = DependencyProperty.RegisterAttached("BindPassword", typeof(bool), typeof(PasswordBoxAssistant), new PropertyMetadata(false, new PropertyChangedCallback(PasswordBoxAssistant.OnBindPasswordChanged))); + PasswordBoxAssistant.UpdatingPassword = DependencyProperty.RegisterAttached("UpdatingPassword", typeof(bool), typeof(PasswordBoxAssistant), new PropertyMetadata(false)); + } + + public static bool GetBindPassword(DependencyObject dp) + { + return (bool)dp.GetValue(PasswordBoxAssistant.BindPassword); + } + + public static string GetBoundPassword(DependencyObject dp) + { + return (string)dp.GetValue(PasswordBoxAssistant.BoundPassword); + } + + private static bool GetUpdatingPassword(DependencyObject dp) + { + return (bool)dp.GetValue(PasswordBoxAssistant.UpdatingPassword); + } + + private static void HandlePasswordChanged(object sender, RoutedEventArgs e) + { + PasswordBox passwordBox = sender as PasswordBox; + PasswordBoxAssistant.SetUpdatingPassword(passwordBox, true); + PasswordBoxAssistant.SetBoundPassword(passwordBox, passwordBox.Password); + PasswordBoxAssistant.SetUpdatingPassword(passwordBox, false); + } + + private static void OnBindPasswordChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e) + { + PasswordBox passwordBox = dp as PasswordBox; + if (passwordBox == null) + { + return; + } + bool oldValue = (bool)e.OldValue; + bool newValue = (bool)e.NewValue; + if (oldValue) + { + passwordBox.PasswordChanged -= new RoutedEventHandler(PasswordBoxAssistant.HandlePasswordChanged); + } + if (newValue) + { + passwordBox.PasswordChanged += new RoutedEventHandler(PasswordBoxAssistant.HandlePasswordChanged); + } + } + + private static void OnBoundPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + PasswordBox passwordBox = d as PasswordBox; + if (d == null || !PasswordBoxAssistant.GetBindPassword(d)) + { + return; + } + passwordBox.PasswordChanged -= new RoutedEventHandler(PasswordBoxAssistant.HandlePasswordChanged); + string newValue = (string)e.NewValue; + if (!PasswordBoxAssistant.GetUpdatingPassword(passwordBox)) + { + passwordBox.Password = newValue; + } + passwordBox.PasswordChanged += new RoutedEventHandler(PasswordBoxAssistant.HandlePasswordChanged); + } + + public static void SetBindPassword(DependencyObject dp, bool value) + { + dp.SetValue(PasswordBoxAssistant.BindPassword, value); + } + + public static void SetBoundPassword(DependencyObject dp, string value) + { + dp.SetValue(PasswordBoxAssistant.BoundPassword, value); + } + + private static void SetUpdatingPassword(DependencyObject dp, bool value) + { + dp.SetValue(PasswordBoxAssistant.UpdatingPassword, value); + } + } +} \ No newline at end of file -- cgit v1.2.3