2009-06-19 4 views
1

ListBoxはアイテムのリストにバインドされています(引数は、文字列と入力と完了の2つの日付があります)。WPFデータバインディングとスタイル付け(IListのアイテム内のデータに基づいて)

完了DateTimeが!= DateTime.MinValueの場合、ListBoxの項目の背景色を灰色にしたいと考えています。

編集:

は、私は、コンバータを作るべきか? DateTimeの値に基づいてDateTimeをBrushに変換しますか?

このようなものがベストですか?または使用できる単純なXamlスニペットがありますか?

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

答えて

8

ValueConverterとなります。もう1つの選択肢はDataTriggerListBoxItemのスタイルで使用することです。たぶん、このような何か:

<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ないとき灰色に背景を設定します。私は、トリガーではなく、同等の比較を行う方法があるとは思わないので、背景はデフォルトでGrayに設定され、Doneがまだ変更されていない場合にのみ白に戻します。おそらく、白の代わりに背景に正しい色を使うほうがいいでしょう(親の背景の価値を得るかもしれません)が、これはあなたに何かを与えるはずです。

更新:、唯一の特定のリストボックスの項目にこのスタイルを適用するスタイルに名前を付け、必要に応じてItemContainerStyleを設定するには:

<ListBox x:Name="StyledListBox" 
    ItemContainerStyle="{StaticResource MinDateTimeListBoxStyle}" /> 
<ListBox x:Name="NormalListBox" /> 
+0

私はちょうどこれと同じ解決策を掲載し、私ので、それを削除D –

+0

それは動作しますが、それは私のウィンドウ上のすべてのリストボックスに影響します - どのように私は単一のリストボックスにのみ適用することができますか? – Nate

関連する問題