2011-09-11 50 views
0

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

我知道如何使用ItemContainerStyle来设置所有项目的样式,但是如何分别为每个项目设置样式?

+0

指定什么样的小部件属性将定义颜色会使这是一个更好的问题。 –

回答

1

是你的套装ItemContainerStyle,使用StyleSelector

This example在MSDN正是你在找什么。

+0

感谢Loxxy和Robert。我去了一个StyleSelector解决方案。我可以访问SelectStyle中的实际项目,以便根据项目的内容设置背景。 – Des

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> 

等,这通常是我的第一选择,但是你的问题并没有真正解释有关情况,无法确定是否正确。