Я создаю пользовательский элемент управления в Silverlight, расширяя TextBox.Цель элемента управления - предоставить логику водяного знака (текст по умолчанию, обычно используемый в полях поиска).Мне удалось, что при доступе к свойству Text, он вернет string.Empty, если Text == Watermark.На самом деле, вы не хотите рассматривать что-то вроде «Введите имя здесь» в качестве релевантного значения.Когда дело доходит до привязки данных TwoWay, все становится сложнее.
Я создал ValueConverter, который принимает в качестве параметра водяной знак и возвращает string.Empty, если Text == Watermark, иначе Text.Я хочу, чтобы элемент управления был очень простым в использовании, поэтому было бы здорово, если бы клиентскому коду не приходилось каждый раз указывать этот конвертер при привязке к свойству Text.Вместо этого конвертер будет подключен внутри пользовательского элемента управления к объекту привязки , связанному со свойством Text.
Я попробовал следующий код, но он вылетает, потому что объект привязки не может быть измененкак только он был назначен.Я пробовал этот код в событиях Load () и OnApplyTemplate ().
var watermarkedTextBox = (WatermarkedTextBox)dependencyObject;
var textBindingExpression = watermarkedTextBox.GetBindingExpression(TextProperty);
if (textBindingExpression != null)
{
var textBinding = textBindingExpression.ParentBinding;
textBinding.Converter = new WatermarkConverter();
textBinding.ConverterParameter = watermarkedTextBox.Watermark;
watermarkedTextBox.SetBinding(TextProperty, textBinding);
}
Так что мне нужно перехватить объект привязки в нужное время (где ему все еще разрешено изменять его).Есть идеи?
Заранее спасибо,
Тибо