¿Cómo actualizo una etiqueta que está en un ControlTemplate de una barra de herramientas en WPF?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo una plantilla ControlTemplate que se compone de un ToolBarTray y una ToolBar. En mi barra de herramientas, tengo varios botones y luego una etiqueta. Quiero poder actualizar la etiqueta en mi barra de herramientas con algo como " 1 de 10 "

Mi primer pensamiento es encontrar programáticamente la etiqueta y establecerla, pero estoy leyendo que esto debería hacerse con Triggers. Me está costando entender cómo lograr esto. ¿Alguna 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"  .. />
¿Fue útil?

Solución

El propósito de un ControlTemplate es definir el aspecto de un control. Para su problema, no estoy seguro si una plantilla de control es la solución correcta.

Como Bryan también señala, debe vincular la propiedad Contenido de la etiqueta a una propiedad que ya esté presente en su control. Esto debe hacerse a través de TemplateBinding .

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

La propiedad MyStatusLabelProperty debe existir en su clase de control. Por lo general, crearía su propio UserControl que tiene una propiedad de dependencia del tipo correcto (ya sea objeto o cadena) que se denomina MyStatusLabelProperty.

Otros consejos

Establecería la etiqueta en el " Contenido " atributo de tu control, por ejemplo,

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

Luego puede configurar el texto de su etiqueta con el atributo de Contenido de su objeto de nivel superior.

Crearía un modelo de vista que implementa la interfaz INotifyPropertyChanged y usaría DataTemplate para mostrarlo usando algo como esto:

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

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

Al usar enlaces no tiene que actualizar explícitamente el contenido de la etiqueta. Todo lo que tiene que hacer es establecer el valor de la propiedad en el modelo de vista y generar el evento PropertyChanged adecuado que hace que la etiqueta actualice su contenido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top