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