2011-09-11 53 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> 

等,這通常是我的第一選擇,但是你的問題並沒有真正解釋有關情況,無法確定是否正確。