Как обновить метку, которая находится в ControlTemplate панели инструментов в WPF?
-
03-07-2019 - |
Вопрос
У меня есть ControlTemplate, который состоит из ToolBarTray и ToolBar. В моей панели инструментов у меня есть несколько кнопок, а затем метка. Я хочу обновить ярлык на панели инструментов, например, "1 из 10". Р>
Моя первая мысль - программно найти метку и установить ее, но я читаю, что это следует делать с помощью триггеров. Мне трудно понять, как это сделать. Есть идеи?
<Style x:Key="DocViewerToolBarStyle" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<ToolBarTray... />
<ToolBar.../>
<Button../>
<Button..>
<Label x:Name="myStatusLabel" .. />
Решение
Цель шаблона ControlTemplate - определить внешний вид элемента управления. По вашей проблеме я не уверен, является ли шаблон управления правильным решением.
Как отмечает Брайан, вы должны связать свойство Content метки со свойством, которое уже присутствует в вашем элементе управления. Это должно быть сделано через TemplateBinding .
<Label x:Name="myStatusLabel" Content={TemplateBinding MyStatusLabelProperty} ../>
Свойство MyStatusLabelProperty должно существовать в вашем классе управления. Обычно вы создаете свой собственный UserControl со свойством зависимости правильного типа (объекта или строки) с именем MyStatusLabelProperty.
Другие советы
Я бы назначил метку для " Содержимое " атрибут вашего контроля, например.
<Label x:Name="myStatusLabel" Content="{TemplateBinding Content}"/>
Затем вы можете установить текст вашей метки с помощью атрибута Content вашего объекта верхнего уровня.
Я бы создал модель представления, которая реализует интерфейс INotifyPropertyChanged, и использовал бы DataTemplate для его отображения, используя что-то вроде этого:
<DataTemplate DataType={x:Type viewmodel:MyToolBarViewModel}>
<Label Content={Binding CurrentPage} />
<Label Content={Binding TotalPages} ContentStringFormat="{}of {0}" />
</DataTemplate>
<ToolBar>
<ContentPresenter Content={Binding <PathtoViewModel>} />
</ToolBar>
При использовании привязок вам не нужно явно обновлять содержимое метки. Все, что вам нужно сделать, это установить значение свойства в модели представления и вызвать соответствующее событие PropertyChanged, которое заставит метку обновить его содержимое.