Como faço para atualizar um rótulo que está em um ControlTemplate de uma barra de ferramentas no WPF?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um ControlTemplate que é composta de um ToolBarTray e uma barra de ferramentas. Na minha barra de ferramentas, eu tenho vários botões e, em seguida, um rótulo. Eu quero ser capaz de atualizar o rótulo na minha barra de ferramentas com algo como "1 de 10"

Meu primeiro pensamento é encontrar programaticamente o rótulo e defini-lo, mas eu estou lendo que isso deve ser feito com gatilhos. Estou tendo dificuldade em entender como fazer isso. Alguma idéia?

   <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"  .. />
Foi útil?

Solução

O propósito de um ControlTemplate é definir a aparência de um controle. Para o seu problema, eu não tenho certeza se um modelo de controle é a solução certa.

Como Bryan também aponta, você deve vincular o conteúdo do rótulo para uma propriedade que já está presente em seu controle. Isto deve ser feito através de TemplateBinding .

<Label x:Name="myStatusLabel" Content={TemplateBinding MyStatusLabelProperty} ../>

A propriedade MyStatusLabelProperty , então tem de existir em sua classe de controle. Normalmente, você deve criar seu próprio UserControl que tem uma propriedade de dependência do tipo correto (ou objeto ou string) que é nomeado MyStatusLabelProperty.

Outras dicas

Gostaria de definir o rótulo para o atributo "Conteúdo" de seu controle por exemplo.

<Label x:Name="myStatusLabel"  Content="{TemplateBinding Content}"/>

Em seguida, você pode definir o texto da sua etiqueta com o atributo conteúdo do seu objeto de nível superior.

Gostaria de criar um modelo de vista que implementa INotifyPropertyChanged interface e usar DataTemplate para exibi-lo usando algo parecido com isto:

<DataTemplate DataType={x:Type viewmodel:MyToolBarViewModel}>
    <Label Content={Binding CurrentPage} />
    <Label Content={Binding TotalPages} ContentStringFormat="{}of {0}" />
</DataTemplate>

<ToolBar>
    <ContentPresenter Content={Binding <PathtoViewModel>} />
</ToolBar>

Com usando ligações que você não tem que explicitamente atualizar o conteúdo do rótulo. Tudo que você tem a fazer é valor ajustado de propriedade no modelo de vista e aumento adequada PropertyChanged evento que faz com que o rótulo para atualizar seu conteúdo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top