2011-03-11 132 views
2

我有一个从TextBox派生的自定义控件。而且我无法找到覆盖默认文本值的方法。所以,简而言之 - 我希望MyTextBox在其中具有一些特定的默认文本。覆盖TextBox.TextProperty的默认值

代码:

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

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

的问题是,房地产(奇怪)包含“默认文本”的价值,但它不会在用户界面中显示(文本框为空)。

我在做什么错?

+0

为什么你将你的构造函数设置为'static'? – 2011-03-11 11:23:41

+0

你是否仅仅为了具有不同的文本属性默认值而继承类? – 2011-03-11 11:34:21

+0

是不是够了?只需添加一个触发器,以确保一个按钮或某些东西被禁用,直到文本更改。 – coldandtired 2011-03-11 13:00:43

回答

3

TextBox使用内部类来提供其大部分功能。这个类与RichTextBox共享。我相信TextBox假定构造时Text将是空的,所以UI不会更新。

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

您可以使用TextProperty获取基类的PropertyChangedCallback。 GetMetadata(typeof(TextBox)) .PropertyChangedCallback。

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

+0

谢谢!只要我开始在实例构造函数中调用PropertyChangedCallback,并在回调函数中开始工作! :) – Jefim 2011-03-11 13:15:10