Переопределить значение по умолчанию TextBox.TextProperty - PullRequest
2 голосов
/ 11 марта 2011

У меня есть пользовательский элемент управления, производный от TextBox. И я не могу найти способ переопределить значение текста по умолчанию. Итак, вкратце - я хочу, чтобы в MyTextBox был какой-то определенный текст по умолчанию.

код:

    public class MyTextBox : TextBox
    {
        static MyTextBox()
        {
            TextBox.TextProperty.OverrideMetadata(
                typeof(MyTextBox), 
                new FrameworkPropertyMetadata("DEFAULT TEXT", OnTextChanged));
        }

        private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
        }
    }

Проблема в том, что свойство (как ни странно) содержит значение «DEFAULT TEXT», но не отображается в пользовательском интерфейсе (текстовое поле пусто).

Что я делаю не так?

1 Ответ

3 голосов
/ 11 марта 2011

TextBox использует внутренний класс для обеспечения большей части своих функций.Этот же класс используется совместно с RichTextBox.Я полагаю, что TextBox предполагает, что Text будет пустым при построении, поэтому пользовательский интерфейс не обновляется.

Следует иметь в виду, что вы фактически закорачивали метод TextBox.OnTextPropertyChanged от вызова.Если вы хотите переопределить PropertyChangedCallback, вам, вероятно, потребуется вручную вызвать версию TextBox, чтобы убедиться, что все работает должным образом.

Вы можете перейти к PropertyChangedCallback базового класса, используя TextProperty. GetMetadata (typeof(TextBox)) .PropertyChangedCallback.

Вы можете вызвать PropertyChangedCallback TextBox в конструкторе экземпляра, чтобы принудительно обновить пользовательский интерфейс.В противном случае вам нужно установить текст напрямую.

...