我想为WPF ListBox中的每个项目分别设置背景颜色。例如如果我将小部件添加到ListBox,我可能会根据小部件的类型为每个小部件设置背景颜色。这必须在代码(而不是XAML)中完成,因为我只知道运行时的项目。
我知道如何使用ItemContainerStyle来设置所有项目的样式,但是你如何为每个项目单独进行?
答案 0 :(得分:1)
是的,您使用 StyleSelector 设置 ItemContainerStyle 。
MSDN上的This example正是您所寻找的。 p>
答案 1 :(得分:0)
有很多方法可以做到这一点。
一个是使用StyleSelector
,正如loxxy建议的那样。这在我的列表中相当低,因为这种代码比我想要的更难阅读(好,找到)和测试。
另一种方法是在风格中使用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>
等。这通常是我的第一选择,但你的问题并没有真正解释有关情况,以了解它是否是正确的方式。