我有进度条的全局模板,但是我必须将它的颜色绑定到另一个元素的状态。看来,如果我改变ProgressBar的风格,它就会失去ControlTemplate。我在这里缺少什么?
<Style TargetType="ProgressBar">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Border Name="PART_Track" ... Background="{TemplateBinding Background}" >
<Rectangle Name="PART_Indicator" ... Fill="{TemplateBinding Foreground}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<ProgressBar x:Name="PBar" Background="#d8d8d8">
<ProgressBar.Resources>
<Style TargetType="{x:Type ProgressBar}" >
<Setter Property="Foreground" Value="#6CC655"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=toggleX, Mode=OneWay}" Value="True">
<Setter Property="Foreground" Value="#FFFFFF"/>
</DataTrigger>
</Style.Triggers>-->
</Style>
</ProgressBar.Resources>
答案 0 :(得分:1)
在我看来,你应该使用两种不同的风格:
一个是通用的。 另一种是更具体的风格。
GENERIC:
<Style TargetType="{x:Type ProgressBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ProgressBar}">
<Border Name="PART_Track" ... Background="{TemplateBinding Background}" >
<Rectangle Name="PART_Indicator" ... Fill="{TemplateBinding Foreground}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
具体:
<Style TargetType="{x:Type ProgressBar}" BasedOn="{StaticResource {x:Type ProgressBar}}">
<Setter Property="Foreground" Value="#6CC655"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=toggleX, Mode=OneWay}" Value="True">
<Setter Property="Foreground" Value="#FFFFFF"/>
</DataTrigger>
</Style.Triggers>
</Setter>
这应该有效。这里的要点是正确使用Style继承,因为一个是&#34;基于&#34;另一个。这样,事情就不应该破坏
答案 1 :(得分:1)
您可以使用BasedOn
继承默认样式。这样,您将获得以基本样式定义的所有属性,包括ControlTemplate:
<ProgressBar.Resources>
<Style TargetType="{x:Type ProgressBar}"
BasedOn="{StaticResource {x:Type ProgressBar}}">
....
</ProgressBar.Resources>