将ProgressBar颜色绑定到属性值

本文关键字:属性 绑定 ProgressBar 颜色 | 更新日期: 2023-09-27 18:21:23

我有一个在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,例如"进行中"等。我见过很多解决方案,比如在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>

对不同的值重复一遍。但是,我不知道这是否是"最佳实践"。

将ProgressBar颜色绑定到属性值

据我所见,对于声明式风格,OP中提到的解决方案是最佳实践。如果需要的话,他们可以进一步将样式抽象到CommonStyles.xaml文件中,并动态引用该样式:< ... Style="{DynamicResource Style_Triggers}"/>