2008-10-21 46 views
1

我有一个由ToolBarTray和ToolBar组成的ControlTemplate。在我的工具栏中,我有几个按钮,然后是一个标签。我希望能够更新我的工具栏中的标签,例如“1/10”如何更新WPF中工具栏的ControlTemplate中的标签?

我的第一个想法是以编程方式查找标签并对其进行设置,但我在阅读时应该使用触发器完成此操作。我很难理解如何做到这一点。有任何想法吗?

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

回答

1

ControlTemplate的用途是定义控件的外观。对于您的问题,我不确定控制模板是否是正确的解决方案。

正如Bryan指出的那样,您应该将标签的内容属性绑定到您的控件中已存在的属性。这应该通过TemplateBinding完成。

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

酒店MyStatusLabelProperty则具有控件类存在。 通常,您将创建自己的UserControl,它具有名为MyStatusLabelProperty的正确类型(对象或字符串)的依赖项属性。

+0

在哪里以及如何创建MyStatusLabelProperty? – ScottG 2008-10-22 18:15:58

1

我会将标签设置为控件的“内容”属性,例如,

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

然后,您可以使用顶级对象的内容属性设置标签的文本。

+0

我的内容是一个DocumentViewer。它没有内容属性。我需要一个自定义属性,但不知道在哪里/如何设置它。 – ScottG 2008-10-22 18:40:01

0

我会创造一个实现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事件,这会导致标签更新其内容。

相关问题