WPFリストボックス内のアイテムごとに背景色を個別に設定したいとします。例えばリストボックスにウィジェットを追加する場合は、ウィジェットのタイプに基づいてそれぞれの背景色を設定します。これは実行時にアイテムが何であるかだけを知るので、これはコード(XAMLではなく)で行う必要があります。別のWPFリストボックスアイテムの背景色を設定する
私はItemContainerStyleを使ってすべてのアイテムのスタイルを設定する方法を知っていますが、アイテムごとにどのように個別に行うのですか?
WPFリストボックス内のアイテムごとに背景色を個別に設定したいとします。例えばリストボックスにウィジェットを追加する場合は、ウィジェットのタイプに基づいてそれぞれの背景色を設定します。これは実行時にアイテムが何であるかだけを知るので、これはコード(XAMLではなく)で行う必要があります。別のWPFリストボックスアイテムの背景色を設定する
私はItemContainerStyleを使ってすべてのアイテムのスタイルを設定する方法を知っていますが、アイテムごとにどのように個別に行うのですか?
はいStyleSelectorを使用して、ItemContainerStyleと設定します。
This example(MSDN)は、探しているものです。
ありがとうLoxxyとRobert。私はStyleSelectorソリューションを使いました。 SelectStyleの実際のアイテムにアクセスできるので、アイテムの内容に応じて背景を設定できます。 – Des
これを実行する方法はたくさんあります。
loxxyが示唆するように、StyleSelector
を使用する人がいます。私のリストではかなり低くなっています。その種のコードは、私が望むよりも(よく見つけて)、テストするのが難しいからです。
もう1つは、スタイルでDataTrigger
を使用することです。アイテムがすべてトリガーで使用できる共通のプロパティを実装している場合は、これは簡単です。この共通のプロパティーを公開するラッパー・クラスを実装することで、うまく機能し、ラップしているオブジェクトに基づいてプロパティーに割り当てる値を特定するロジックが含まれます。アイテムは、本当に、本当に不均一である場合は、データテンプレートを使用して結果を達成することができます(これはStyleSelector
は確かに議論の余地あるよりも簡単であるかどうか。)
、例えば:
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:Foo}">
<TextBlock Text="{Binding FooText}" Background="Red"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Bar}">
<TextBlock Text="{Binding BarText}" Background="Yellow"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Baz}">
<TextBlock Text="{Binding BazText}" Background="PapayaWhip"/>
</DataTemplate>
</ListBox.Resources>
などこれは、一般的には私の最初の選択ですが、あなたの質問は、状況が正しいかどうかを知るための十分な説明はしていません。
色を定義するウィジェットの属性の種類を指定すると、これはもっと良い質問になりました。 –