覆盖TextBox.TextProperty的默认值

时间:2011-03-11 11:14:18

标签: wpf textbox dependency-properties

我有一个源自TextBox的自定义控件。我找不到覆盖默认Text值的方法。所以,简而言之 - 我希望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”值,但它没有显示在UI中(文本框为空)。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

TextBox使用内部类来提供其大部分功能。这个类与RichTextBox共享。我相信TextBox假设Text在构造时将为空,因此UI不会更新。

要记住的一件事是,您已经有效地将TextBox.OnTextPropertyChanged方法与调用方法短路了。如果要覆盖PropertyChangedCallback,那么您可能需要手动调用TextBox版本以确保一切按预期工作。

您可以使用TextProperty到达基类的PropertyChangedCallback。GetMetadata(typeof(TextBox))。PropertyChangedCallback。

您可以在实例构造函数中调用TextBox的PropertyChangedCallback来强制UI更新。否则,您需要直接设置文本。