我有一个ListBox绑定到一个Items列表(对于争论,假设它有一个字符串,两个日期已输入和完成)。
如果Done DateTime为!= DateTime.MinValue,我想使ListBox中项目的背景颜色为灰色。
修改
我应该制作转换器吗?并根据DateTime的值将DateTime转换为Brush?
这样的事情是我最好的选择吗?或者我可以使用一个简单的Xaml片段吗?
[ValueConversion(typeof(DateTime), typeof(Brush))]
class MyConverter : IValueConverter
{
...
}
答案 0 :(得分:8)
ValueConverter
可行。另一种选择是使用DataTrigger
样式的ListBoxItem
。也许是这样的:
<Style x:Name="MinDateTimeListBoxStyle" TargetType="ListBoxItem">
<Style.Triggers>
<Setter Property="Background" Value="Gray" />
<DataTrigger Binding="{Binding Path=Done}"
Value="{x:Static sys:DateTime.MinValue}">
<Setter Property="Background" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>
当Done
的值不是DateTime.MinValue
时,这会将背景设置为灰色。我不认为有一种方法可以在触发器中进行不等于比较,因此默认情况下将背景设置为灰色,并且仅在Done
尚未更改时才将其更改为白色。使用背景的正确颜色而不是白色可能会更好(也许得到父背景的值?),但这应该给你一些东西。
更新:要将此样式应用于仅某些列表框的项目,请为该样式指定名称并根据需要设置ItemContainerStyle
:
<ListBox x:Name="StyledListBox"
ItemContainerStyle="{StaticResource MinDateTimeListBoxStyle}" />
<ListBox x:Name="NormalListBox" />