Просматривая документацию MSDN, вы можете встретить этот драгоценный камень: 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);
}
}
Вот оно, оно выдает исключение каждый раз, когда не находится в режиме разработки. Это не имеет смысла, верно? Зачем Microsoft это делать?
К сожалению, я пока не нашел однозначного ответа, однако, если бы мне пришлось догадываться, это потому, что Microsoft планирует реализовать поведение Watermark для элемента управления TextBox в будущей версии (возможно, v5) и хотела эффективно зарезервировать это свойство, чтобы сторонние создатели элементов управления не наследуют TextBox и не создают свое собственное свойство Watermark.
Я знаю по крайней мере одного поставщика элементов управления, ComponentOne, который имеет элемент управления, который наследуется от TextBox и предоставляет свойство Watermark.
Мне кажется, что это способ Microsoft отговаривать людей использовать это имя свойства на своих собственных подклассах TextBox.