Программная настройка свойства WPF - PullRequest
0 голосов
/ 17 мая 2011

У меня есть элемент управления TextBlock, и я декларативно устанавливаю свойство Text на {loc:Translate}.

<TextBlock x:Name="Message" Text="{loc:Translate}" loc:TranslateExtension.Uid="myMessage"  />

Во время выполнения я обновляю значение свойства Text на другое значение. Затем мне нужно сбросить его обратно на {loc:Translate}.

У меня вопрос, как программно установить Text на {loc:Translate}?

1 Ответ

2 голосов
/ 17 мая 2011

Когда процессор XAML обрабатывает узел типа и значение элемента, которое является расширением разметки, он вызывает метод ProvideValue этого расширения разметки и записывает результат в граф объекта или поток сериализации. Модуль записи объекта XAML передает контекст службы каждой такой реализации через параметр serviceProvider.

tb.Text = new TranslateExtension().ProvideValue(null) as string;

Это должно быть, за исключением того, что в нем отсутствует 'правильный' IServiceProvider -параметр.

При обычном использовании .NET Framework XAML Services и реализованные средства записи объектов XAML будут предоставлять поставщика услуг всем методам преобразования значений, которые он вызывает во время обработки XAML. Однако для надежности вы должны предоставить пути кода для нулевых значений как для самого поставщика услуг, так и для любой запрашиваемой услуги. Нулевые значения могут возникать, если ваше расширение разметки применяется в некоторых случаях, когда типичная поддержка служб, предоставляемая инфраструктурой синтаксического анализатора XAML, недоступна.

Таким образом, в зависимости от реализации вашего расширения вы можете передать null в ProvideValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...