将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
,它反映了两个状态的枚举:Complete
和Failed
。
如果FileState
的值是Complete
,我希望ProgressBar
的颜色是Green
。如果FileState
是Failed
,我希望颜色是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>
对不同的值重复一遍。但是,我不知道这是否是"最佳实践"。
据我所见,对于声明式风格,OP中提到的解决方案是最佳实践。如果需要的话,他们可以进一步将样式抽象到CommonStyles.xaml文件中,并动态引用该样式:< ... Style="{DynamicResource Style_Triggers}"/>