Я видел некоторые статьи, которые показывают, как использовать 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.
Возможно, что-то очевидное, чего я не вижу...