2009-06-19 35 views
1

我有一个列表框绑定到项目列表(争论,可以说它有一个字符串和两个日期输入和完成)。WPF数据绑定和基于IList中的项目中的数据的样式

如果完成日期时间为!= DateTime.MinValue,我想使ListBox中项目的背景颜色为灰色。

编辑:

我应该做一个转换器?并根据DateTime的值将DateTime转换为Brush?

是这样的我最好的选择?或者我可以使用一个简单的Xaml片段?

[ValueConversion(typeof(DateTime), typeof(Brush))] 
class MyConverter : IValueConverter 
{ 
    ... 
} 

回答

8

A ValueConverter会工作。另一种选择是使用ListBoxItem风格的DataTrigger。也许是这样的:

<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" /> 
+0

我只是张贴了这个相同的解决方案,然后将其删除,因为我看到你击败了我...我改变了你的想法:D – 2009-06-19 22:28:58