设置单独的WPF ListBox项的背景颜色

时间:2011-09-11 06:12:23

标签: wpf background listboxitem

我想为WPF ListBox中的每个项目分别设置背景颜色。例如如果我将小部件添加到ListBox,我可能会根据小部件的类型为每个小部件设置背景颜色。这必须在代码(而不是XAML)中完成,因为我只知道运行时的项目。

我知道如何使用ItemContainerStyle来设置所有项目的样式,但是你如何为每个项目单独进行?

2 个答案:

答案 0 :(得分:1)

是的,您使用 StyleSelector 设置 ItemContainerStyle

MSDN上的

This example正是您所寻找的。

答案 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>

等。这通常是我的第一选择,但你的问题并没有真正解释有关情况,以了解它是否是正确的方式。