Как обновить метку, которая находится в ControlTemplate панели инструментов в WPF?

StackOverflow https://stackoverflow.com/questions/222052

  •  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, которое заставит метку обновить его содержимое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top