在項目中使用ListBox時,經常會將ItemContainerStyle和ItemTemplate的作用搞混,ItemTemplate可以搞定一切好似ItemContainerStyle有點多余。我們再來看下ItemContainerStyle和ItemTemplate。
ItemContainerStyle用於給每個Item的容器定義樣式,其類型是Style。包含了操作Item的Triggers。
ItemTemplate是每個Item的現實樣式,其類型是DataTemplate。

在實際應用中,我們往往需要根據用戶操作不斷的改變ListBox中Items的顯示樣式。這里 總結一下ListBox中3種應用場景中的最優解決方案。
A.選中Item時改變Item項的背景顏色。
S.在 ItemContainerStyle中寫ControlTemplate的樣式給定背景色,使用Trigger在Selected為True時改變背景色,代碼如下:
<Style x:Key="containerstyle1" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="b1" Background="Red">
<ContentPresenter></ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green" TargetName="b1"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
B. 選中Item時改變Item項的部分顯示。
S. 使用改變變量的方式,代碼如下:
<Style x:Key="containerstyle1" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="b1" Background="Red">
<Label x:Name="l1" Margin="5" Content="{Binding A1}" FontSize="26" Foreground="DarkBlue"></Label>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Content" Value="{Binding A2}" TargetName="l1"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
C. 選中Item時需要完全改變Item呈現的樣式,如圓形變成矩形等等。
S. 改變Item項的DataTemplate,代碼如下:
<DataTemplate x:Key="ItemTemplate" DataType="{x:Type ListBoxItem}">... </DataTemplate>
<DataTemplate x:Key="SelectedTemplate" DataType="{x:Type ListBoxItem}">... </DataTemplate>
<Style x:Key="SeatListStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter></ContentPresenter>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}"></Setter>
</Style>
其他更多的應用方式,歡迎大家補充。
轉載時,請注明本文來源:www.cnblogs.com/tmywu
作者: 淘米部落
mail:tommywu23@126.com