using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; namespace XHandler.Controls { public class PasswordBoxAttached { public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached("Password", typeof(string), typeof(PasswordBoxAttached), new PropertyMetadata("", PasswordPropertyChangedCallback)); [AttachedPropertyBrowsableForType(typeof(System.Windows.Controls.PasswordBox))] public static string GetPassword(DependencyObject obj) { return (string)obj.GetValue(PasswordProperty); } public static void SetPassword(DependencyObject obj, string value) { obj.SetValue(PasswordProperty, value); } private static void PasswordPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is System.Windows.Controls.PasswordBox pb) { pb.Password = e.NewValue.ToString(); pb.GetType().GetMethod("Select", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(pb, new object[] { pb.Password.Length, 0 }); } } } }