2009-06-19 42 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