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