using System; using System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Markup; namespace Gestor.Application.Componentes { public class CustomPasswordBox : UserControl, IComponentConnector { public readonly static DependencyProperty IsReadOnlyProperty; public readonly static DependencyProperty TextProperty; public readonly static DependencyProperty PasswordViewProperty; private bool _typing; internal Grid LayoutRoot; internal TextBox TextRead; internal TextBox TextMask; internal System.Windows.Controls.PasswordBox PasswordBox; private bool _contentLoaded; public bool IsReadOnly { get { return (bool)base.GetValue(CustomPasswordBox.IsReadOnlyProperty); } set { base.SetValue(CustomPasswordBox.IsReadOnlyProperty, value); } } public bool PasswordView { get { return (bool)base.GetValue(CustomPasswordBox.PasswordViewProperty); } set { base.SetValue(CustomPasswordBox.PasswordViewProperty, value); } } public string Text { get { return (string)base.GetValue(CustomPasswordBox.TextProperty); } set { base.SetValue(CustomPasswordBox.TextProperty, value); } } static CustomPasswordBox() { CustomPasswordBox.IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(CustomPasswordBox), new PropertyMetadata(false, new PropertyChangedCallback(CustomPasswordBox.OnBoundIsReadOnlyChanged))); CustomPasswordBox.TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(CustomPasswordBox), new PropertyMetadata(string.Empty, new PropertyChangedCallback(CustomPasswordBox.OnBoundPasswordChanged))); CustomPasswordBox.PasswordViewProperty = DependencyProperty.Register("PasswordViewProperty", typeof(bool), typeof(CustomPasswordBox), new PropertyMetadata(false, new PropertyChangedCallback(CustomPasswordBox.OnBoundPasswordViewChanged))); } public CustomPasswordBox() { this.InitializeComponent(); this.LayoutRoot.DataContext = this; this.PasswordView = false; } private void Eye_Click(object sender, RoutedEventArgs e) { if (this.IsReadOnly) { return; } this.PasswordView = !this.PasswordView; } [DebuggerNonUserCode] [GeneratedCode("PresentationBuildTasks", "4.0.0.0")] public void InitializeComponent() { if (this._contentLoaded) { return; } this._contentLoaded = true; System.Windows.Application.LoadComponent(this, new Uri("/Gestor.Application;component/componentes/custompasswordbox.xaml", UriKind.Relative)); } private static void OnBoundIsReadOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CustomPasswordBox customPasswordBox = d as CustomPasswordBox; if (d == null || customPasswordBox == null) { return; } bool newValue = (bool)e.NewValue; customPasswordBox.PasswordBox.Visibility = (newValue ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible); customPasswordBox.TextRead.Visibility = (newValue ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed); customPasswordBox.TextMask.Visibility = (newValue ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed); } private static void OnBoundPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CustomPasswordBox customPasswordBox = d as CustomPasswordBox; if (d == null || customPasswordBox == null) { return; } string newValue = (string)e.NewValue ?? ""; if (customPasswordBox._typing) { return; } customPasswordBox.TextMask.Text = "".PadLeft(newValue.Length, '•'); customPasswordBox.PasswordBox.Password = newValue; } private static void OnBoundPasswordViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CustomPasswordBox text = d as CustomPasswordBox; if (d == null || text == null) { return; } bool newValue = (bool)e.NewValue; if (!newValue) { text.PasswordBox.Password = text.TextRead.Text; } else { text.TextRead.Text = text.PasswordBox.Password; } text.PasswordBox.Visibility = (newValue ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible); text.TextRead.Visibility = (newValue ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed); text.TextMask.Visibility = text.PasswordBox.Visibility; } private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { this._typing = true; this.Text = this.PasswordBox.Password; this._typing = false; this.TextMask.Text = "".PadLeft(this.PasswordBox.Password.Length, '•'); } [DebuggerNonUserCode] [EditorBrowsable(EditorBrowsableState.Never)] [GeneratedCode("PresentationBuildTasks", "4.0.0.0")] void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: { this.LayoutRoot = (Grid)target; return; } case 2: { this.TextRead = (TextBox)target; this.TextRead.TextChanged += new TextChangedEventHandler(this.TextRead_PasswordChanged); return; } case 3: { this.TextMask = (TextBox)target; return; } case 4: { this.PasswordBox = (System.Windows.Controls.PasswordBox)target; this.PasswordBox.PasswordChanged += new RoutedEventHandler(this.PasswordBox_PasswordChanged); return; } case 5: { ((Button)target).Click += new RoutedEventHandler(this.Eye_Click); return; } } this._contentLoaded = true; } private void TextRead_PasswordChanged(object sender, TextChangedEventArgs e) { this.Text = this.TextRead.Text; } } }