1

我有一个由 ToolBarTray 和 ToolBar 组成的 ControlTemplate。在我的工具栏中,我有几个按钮,然后是一个标签。我希望能够使用“1 of 10”之类的内容更新工具栏中的标签

我的第一个想法是以编程方式找到标签并设置它,但我读到这应该用触发器来完成。我很难理解如何做到这一点。有任何想法吗?

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

3 回答 3

1

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

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

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

于 2008-10-21T14:33:07.217 回答
1

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

正如 Bryan 还指出的那样,您应该将 Label 的Content属性绑定到控件中已经存在的属性。这应该通过TemplateBinding完成。

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

然后属性MyStatusLabelProperty必须存在于您的控件类中。通常,您将创建自己的UserControl,该 UserControl 具有名为 MyStatusLabelProperty 的正确类型(对象或字符串)的依赖项属性。

于 2008-10-21T14:41:15.797 回答
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 事件,这会导致标签更新其内容。

于 2008-10-29T19:13:06.533 回答