我想爲WPF ListBox中的每個項目單獨設置背景顏色。例如如果我將小部件添加到ListBox,我可能會根據小部件的類型爲每個小部件設置背景顏色。這必須在代碼(而不是XAML)中完成,因爲我只知道項目在運行時是什麼。設置單獨的WPF ListBox項目的背景顏色
我知道如何使用ItemContainerStyle來設置所有項目的樣式,但是如何分別爲每個項目設置樣式?
我想爲WPF ListBox中的每個項目單獨設置背景顏色。例如如果我將小部件添加到ListBox,我可能會根據小部件的類型爲每個小部件設置背景顏色。這必須在代碼(而不是XAML)中完成,因爲我只知道項目在運行時是什麼。設置單獨的WPF ListBox項目的背景顏色
我知道如何使用ItemContainerStyle來設置所有項目的樣式,但是如何分別爲每個項目設置樣式?
是你的套裝ItemContainerStyle,使用StyleSelector。
This example在MSDN正是你在找什麼。
感謝Loxxy和Robert。我去了一個StyleSelector解決方案。我可以訪問SelectStyle中的實際項目,以便根據項目的內容設置背景。 – Des
有很多方法可以做到這一點。
一個是使用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>
等,這通常是我的第一選擇,但是你的問題並沒有真正解釋有關情況,無法確定是否正確。
指定什麼樣的小部件屬性將定義顏色會使這是一個更好的問題。 –