Я видел несколько статей, которые показывают, как использовать AlternationIndex
с ListBox
es или ListView
s, но я потратил несколько часов, пытаясь получить чередующиеся цвета фона в базовом классе ItemsControl
, и ничего не кажется работать. Все ListBox
сэмплов, которые я видел, используют ListBoxItem
в качестве целевого типа для стиля, который устанавливает фон на основе AlternationIndex
- как этот из MSDN :
<Grid>
<Grid.Resources>
<Style x:Key="alternatingWithTriggers" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
<Style.Triggers>
<Trigger Property="ListBox.AlternationIndex" Value="1">
<Setter Property="Background" Value="CornflowerBlue"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<Trigger Property="ListBox.AlternationIndex" Value="2">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="Foreground" Value="Navy"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<ListBox AlternationCount="3" ItemsSource="{StaticResource data}"
ItemContainerStyle="{StaticResource alternatingWithTriggers}">
</ListBox>
</Grid>
Я хочу использовать ItemsControl
, потому что мне не нужна функциональность выбора, и я думаю, что рестайлинг ListBox
, чтобы скрыть его, может быть не лучшим выбором.
Это одна из вещей, которые я пытался:
<DataTemplate DataType="{x:Type vm:ObservableCollectionItem}">
<Grid>
<!-- some content here -->
</Grid>
</DataTemplate>
<!-- ... -->
<ItemsControl
ItemsSource="{Binding ObservableCollectionItems}"
AlternationCount="2"
>
<ItemsControl.ItemContainerStyle>
<Style>
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Grid.Background" Value="Red"></Setter>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Grid.Background" Value="Blue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Проблема, с которой я столкнулся, заключалась в том, что у визуального дерева есть список ContentPresenter
с чередованием ItemsControl.AlternationIndex
от 0 до 1, но Grid
в каждом ContentPresenter
имеет ItemsControl.AlternationIndex
, установленный на 0.
Возможно, есть что-то очевидное, чего мне не хватает ...