【发布时间】:2012-04-03 12:11:26
【问题描述】:
在浏览 MSDN 文档时,您可能会遇到这个 gem:TextBox.Watermark。
“太棒了!我一直想要一种在我的文本框上添加水印的内置方法!这太棒了,让我继续在 XAML 中设置它!”
<TextBox Watermark="This is my watermark" Margin="20"></TextBox>
不幸的是,如果你运行它,你将不会得到你所期望的:
还有细节:
这是什么?好吧,仔细看看 MSDN 文档:
没错。 Silverlight 4 支持它,但它也说“不要在 Silverlight 4 应用程序中使用”。如果你使用它,你会收到一个 System.NotImplemented 异常。为了验证,下面是通过 Reflector 反编译的属性代码:
[EditorBrowsable(EditorBrowsableState.Never)]
public object Watermark
{
get
{
StubHelper.ThrowIfNotInDesignMode();
return base.GetValue(WatermarkProperty);
}
set
{
StubHelper.ThrowIfNotInDesignMode();
base.SetValue(WatermarkProperty, value);
}
}
就是这样——只要不在设计模式下,它就会抛出异常。这没有意义吧?微软为什么要这样做?
不幸的是,我还没有找到任何明确的答案,但是如果我不得不猜测这是因为微软计划在未来版本(可能是 v5)中在 TextBox 控件上实现水印行为,并希望有效地保留此属性,所以第三方控件创建者不会继承 TextBox 并创建自己的 Watermark 属性。 我知道至少有一个控件供应商 ComponentOne,它有一个从 TextBox 继承并提供 Watermark 属性的控件。 在我看来,这似乎是 Microsoft 阻止人们在自己的 TextBox 子类中使用此属性名称的方式。
【问题讨论】:
标签: .net silverlight-4.0