Как использовать TextBox.Watermark в Silverlight 4?

Просматривая документацию MSDN, вы можете наткнуться на эту жемчужину: TextBox. Водяной знак.

«Отлично! Я давно хотел иметь встроенный способ нанесения водяных знаков на текстовые поля! Это здорово, позвольте мне продолжить и установить это в XAML!"

<TextBox Watermark="This is my watermark" Margin="20"></TextBox>

К сожалению, если вы запустите это, вы не получите того, что ожидаете:

enter image description here

И подробности: enter image description here

Что это? Что ж, внимательно посмотрите на документацию MSDN: enter image description here

Верно. Он поддерживается в 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.

8
задан Unknown 6 April 2012 в 09:57
поделиться