/// <summary>Приватное свойство для получения объекта-слушателя.</summary> private static ListenerTextPasswordBox GetListenerText(PasswordBox passwordBox) { ListenerTextPasswordBox listener = (ListenerTextPasswordBox)passwordBox.GetValue(ListenerTextPropertyKey.DependencyProperty); // Если элемент не задан, то его создание и сохранение. if (listener == null) { passwordBox.SetValue(ListenerTextPropertyKey, listener = new ListenerTextPasswordBox(passwordBox)); } return(listener); }
/// <summary>Обработчик изменения значения свойства.</summary> /// <param name="d">Объект - владелец свойства. Исключение - если не PasswordBox.</param> /// <param name="e">Аргументы изменения.</param> private static void ChangeText(DependencyObject d, DependencyPropertyChangedEventArgs e) { // Если старое и новое значения равны, то выход из метода. if ( (e.OldValue == null && e.NewValue == null) || (e.OldValue != null && e.OldValue.Equals(e.NewValue)) ) { return; } // Приведение к PasswordBox. if (!(d is PasswordBox passwordBox)) { throw new ArgumentException("Должен быть PasswordBox", nameof(d)); } // Получение объекта-слушателя события PasswordChanged. ListenerTextPasswordBox listener = GetListenerText(passwordBox); // Передача нового значения пароля. listener.ChangePassword((string)e.NewValue); }