将ProgressBar颜色绑定到属性值

时间:2015-11-09 16:00:40

标签: c# wpf xaml

我在XAML中声明了ProgressBar

<ProgressBar Width="100" Height="15" BorderThickness="0" Value="{Binding Progress}" Maximum="{Binding Maximum}" Minimum="{Binding Minimum}"/>

我们还假装我通过绑定提供了另一个属性,FileState反映了两个状态的枚举:CompleteFailed

如果FileState值为Complete,我希望ProgressBar的颜色为Green。如果FileStateFailed,我希望颜色为Red

XAML是否以声明式方式实现了这一点?

目标是促进更多FileState s,例如&#34; In Progress&#34;等我已经看到了一堆像Highlighting Items in a WPF ListView中描述的那样的解决方案;但是,这不是通过声明性XAML,而是通过实际代码来促进的。

链接文章的派生解决方案是:

<ProgressBar.Style>
    <Style TargetType="{x:Type ProgressBar}">
        <Style.Triggers>
            <!--"2" being "Complete"-->
            <DataTrigger Binding="{Binding FileState}" Value="2">
                <Setter Property="Background" Value="AliceBlue"/>
            </DataTrigger>
        </Style.Triggers>    
    </Style>
</ProgressBar.Style>

并为不同的值重复这一点。但是,我不知道这是不是最好的做法&#34;。

1 个答案:

答案 0 :(得分:0)

从我所看到的,对于声明式样式,OP中提到的解决方案是最佳实践。如果需要,他们可以进一步抽象出styles to a CommonStyles.xaml file并动态引用该样式:< ... Style="{DynamicResource Style_Triggers}"/>