基本上,我有一个复选框,它在视图模型中绑定了IsChecked属性。然后,在数据挖掘程序中计算此属性,以确定进度条的颜色。进度条本身是用我将要呈现的代码来设计的。
现在,这个代码起作用了:
<Style x:Key="CustomProgressBar" TargetType="ProgressBar">
<Style.Triggers>
<DataTrigger Value="True" Binding="{Binding Path=IsChecked}">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Value="False" Binding="{Binding Path=IsChecked}">
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Border BorderBrush="{DynamicResource ProgressBorderBrushColor}" BorderThickness="0" Background="{DynamicResource ProgressBackgroundColor}" CornerRadius="0" Padding="0">
<Grid x:Name="PART_Track">
<Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Fill" Value="{Binding}"/>
</Style>
</Rectangle.Style>
</Rectangle>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>但以下情况并非如此:
<Style x:Key="CustomProgressBar" TargetType="ProgressBar">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Border BorderBrush="{DynamicResource ProgressBorderBrushColor}" BorderThickness="0" Background="{DynamicResource ProgressBackgroundColor}" CornerRadius="0" Padding="0">
<Grid x:Name="PART_Track">
<Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left">
<Rectangle.Style>
<Style TargetType="Rectangle">
<Style.Triggers>
<DataTrigger Value="True" Binding="{Binding Path=IsChecked}">
<Setter Property="Fill" Value="Red"/>
</DataTrigger>
<DataTrigger Value="False" Binding="{Binding Path=IsChecked}">
<Setter Property="Fill" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>你能告诉我在第二个xaml中遗漏了什么或者哪里有问题吗?(不介意到边境地区)
发布于 2018-01-25 15:21:55
我认为这是反向的:第二个例子起作用,而第一个例子则不行。
第一个示例不起作用,因为Rectangle.Fill绑定没有意义。您正在将Fill绑定到任何ProgressBar.DataContext。将Rectangle定义更改为:
<Rectangle x:Name="PART_Indicator"
HorizontalAlignment="Left"
Fill="{TemplateBinding Background}" />{TemplateBinding XYZ}是{Binding Path=XYZ, RelativeSource={RelativeSource TemplatedParent}的一种短形式。它的意思是“绑定到应用此模板的控件上的属性XYZ”。在本例中,模板被应用于ProgressBar,因此我们将Rectangle.Fill绑定到进度条的Background。当Setters更新背景时,矩形也会被更新。
https://stackoverflow.com/questions/48445176
复制相似问题