我有一个源自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中(文本框为空)。
我做错了什么?
答案 0 :(得分:3)
TextBox使用内部类来提供其大部分功能。这个类与RichTextBox共享。我相信TextBox假设Text在构造时将为空,因此UI不会更新。
要记住的一件事是,您已经有效地将TextBox.OnTextPropertyChanged方法与调用方法短路了。如果要覆盖PropertyChangedCallback,那么您可能需要手动调用TextBox版本以确保一切按预期工作。
您可以使用TextProperty到达基类的PropertyChangedCallback。GetMetadata(typeof(TextBox))。PropertyChangedCallback。
您可以在实例构造函数中调用TextBox的PropertyChangedCallback来强制UI更新。否则,您需要直接设置文本。