2008-10-21 16 views
1

J'ai un ControlTemplate qui est constitué d'un ToolBarTray et d'une barre d'outils. Dans ma barre d'outils, j'ai plusieurs boutons, puis une étiquette. Je veux être en mesure de mettre à jour l'étiquette dans ma barre d'outils avec quelque chose comme "1 sur 10"Comment mettre à jour une étiquette qui se trouve dans un ControlTemplate d'une barre d'outils dans WPF?

Ma première pensée est de trouver par programmation l'étiquette et le définir, mais je suis en train de lire que cela devrait être fait avec Triggers. J'ai du mal à comprendre comment accomplir cela. Des idées?

<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" .. /> 

Répondre

1

Le but d'un ControlTemplate est de définir l'apparence d'un contrôle. Pour votre problème, je ne suis pas sûr si un modèle de contrôle est la bonne solution. Comme Bryan l'indique également, vous devez lier la propriété Content à une propriété déjà présente dans votre contrôle. Cela doit être fait via TemplateBinding.

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

La propriété MyStatusLabelProperty doit alors exister à votre classe de contrôle. Habituellement, vous créez votre propre UserControl qui possède une propriété de dépendance du type correct (objet ou chaîne) nommé MyStatusLabelProperty.

+0

où et comment créer MyStatusLabelProperty? – ScottG

1

Je définirais l'étiquette sur l'attribut "Content" de votre contrôle, par ex. Ensuite, vous pouvez définir le texte de votre étiquette avec l'attribut Content de votre objet de premier niveau.

+0

Mon contenu est un DocumentViewer. Il n'a pas de propriété de contenu. J'ai besoin d'une propriété personnalisée, mais je ne sais pas où et comment la définir. – ScottG

0

Je voudrais créer un modèle de vue qui implémente l'interface INotifyPropertyChanged et utiliser DataTemplate pour l'afficher en utilisant quelque chose comme ceci:

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

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

Avec l'aide de fixations vous ne devez pas mettre à jour explicitement le contenu de l'étiquette. Tout ce que vous avez à faire est de définir la valeur de la propriété dans le modèle de vue et de déclencher l'événement PropertyChanged approprié qui provoque la mise à jour de son contenu.