【发布时间】:2011-03-11 11:14:18
【问题描述】:
我有一个从 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”值,但它没有显示在 UI 中(文本框为空)。
我做错了什么?
【问题讨论】:
-
为什么将构造函数设置为
static? -
您是否只是为了为 text 属性设置不同的默认值而进行子类化?
-
还不够吗?只需添加一个触发器以确保在文本更改之前禁用按钮或其他内容。 -
static仅用于覆盖属性元数据一次;不,默认值是整个子类的一小部分。 -
<TextBox Text="DEFAULT TEXT">还不够,因为我必须始终通过 XAML 编写它。创建样式也是如此(即使使用默认样式,我也必须始终记住为每种样式设置BasedOn)。另外,我需要的不仅仅是更改默认值 => 最合乎逻辑的地方是覆盖默认属性值。
标签: wpf textbox dependency-properties