Come posso aggiornare un'etichetta che si trova in un ControlTemplate di una barra degli strumenti in WPF?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un ControlTemplate composto da una barra degli strumenti e una barra degli strumenti. Nella mia barra degli strumenti, ho diversi pulsanti e quindi un'etichetta. Voglio essere in grado di aggiornare l'etichetta nella mia barra degli strumenti con qualcosa come "1 di 10"

Il mio primo pensiero è quello di trovare programmaticamente l'etichetta e impostarla, ma sto leggendo che questo dovrebbe essere fatto con Trigger. Sto facendo fatica a capire come raggiungere questo obiettivo. Qualche idea?

   <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"  .. />
È stato utile?

Soluzione

Lo scopo di un ControlTemplate è di definire l'aspetto di un controllo. Per il tuo problema, non sono sicuro che un modello di controllo sia la soluzione giusta.

Come sottolinea anche Bryan, dovresti associare la proprietà Contenuto dell'etichetta a una proprietà che è già presente nel tuo controllo. Questo dovrebbe essere fatto tramite TemplateBinding .

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

La proprietà MyStatusLabelProperty deve quindi esistere nella tua classe di controllo. Di solito, crei il tuo UserControl con una proprietà di dipendenza del tipo corretto (oggetto o stringa) che si chiama MyStatusLabelProperty.

Altri suggerimenti

Vorrei impostare l'etichetta su " Contenuto " attributo del tuo controllo, ad es.

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

Quindi puoi impostare il testo dell'etichetta con l'attributo Content dell'oggetto di livello superiore.

Vorrei creare un modello di vista che implementa l'interfaccia INotifyPropertyChanged e utilizzare DataTemplate per visualizzarlo usando qualcosa del genere:

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

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

Con l'utilizzo dei bind non è necessario aggiornare esplicitamente il contenuto dell'etichetta. Tutto quello che devi fare è impostare il valore della proprietà nel modello di visualizzazione e generare l'evento PropertyChanged corretto che fa sì che l'etichetta aggiorni il suo contenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top