Поделиться через


HierarchicalDataTemplate.AlternationCount Свойство

Определение

Возвращает или задает количество чередующихся контейнеров элементов для дочерних элементов.

public:
 property int AlternationCount { int get(); void set(int value); };
public int AlternationCount { get; set; }
member this.AlternationCount : int with get, set
Public Property AlternationCount As Integer

Значение свойства

Количество чередующихся контейнеров элементов на следующем уровне элементов.

Примеры

В следующем примере создается TreeView объект , привязанный к данным глубины трех уровней, и каждый элемент отображается в TextBlock. Объекты TextBlock на первом уровне имеют одинаковые значения свойств, TextBlock объекты второго уровня используют чередующиеся значения для FontStyle свойства, а TextBlock объекты третьего уровня используют чередующиеся значения для Background свойства .

HierarchicalDataTemplate Так как для первого уровня , Level1Dataсвойство AlternationCount имеет значение 2, ItemsControl.AlternationIndex для TreeViewItem объектов второго уровня чередуется от 0 до 1. В для HierarchicalDataTemplate второго уровня FontStyleLevel2DataTextBlock объект привязывается к ItemsControl.AlternationIndex и AlternationConverter предоставляется для преобразования ItemsControl.AlternationIndex в переменную .FontStyle Аналогичная связь существует между Level2Data и Level3Data: для AlternationCount задано значение 3 в Level2Data, а TextBlock свойство in Level3Ddata привязано BackgroundItemsControl.AlternationIndexк .

<StackPanel>
  <StackPanel.Resources>

    <!--Returns alternating brushes.-->
    <AlternationConverter x:Key="TeamsBackgroundConverter">
      <SolidColorBrush>LimeGreen</SolidColorBrush>
      <SolidColorBrush>SpringGreen</SolidColorBrush>
      <SolidColorBrush>Chartreuse</SolidColorBrush>
    </AlternationConverter>

    <!--The DataTemplate used by TreeViewItems in the third level
    of the TreeView.-->
    <DataTemplate x:Key="Level3Data">
      <TextBlock Text="{Binding Path=Name}"
        Background="{Binding RelativeSource={RelativeSource FindAncestor, 
           AncestorType={x:Type TreeViewItem}},
           Path=(ItemsControl.AlternationIndex),
           Converter={StaticResource TeamsBackgroundConverter}}"/>
    </DataTemplate>

    <!--Returns altnernating FontStyles.-->
    <AlternationConverter x:Key="LeagueFontStyleConverter">
      <FontStyle >Italic</FontStyle>
      <FontStyle >Normal</FontStyle>
    </AlternationConverter>

    <!--The HierarchicalDataTemplate used by TreeViewItems
     in the second level of the TreeView.-->
    <HierarchicalDataTemplate x:Key="Level2Data"
      ItemsSource="{Binding Path=Teams}"
      ItemTemplate="{StaticResource Level3Data}"
      AlternationCount="3">
      <TextBlock Text="{Binding Path=Name}"
        FontStyle="{Binding RelativeSource={RelativeSource FindAncestor, 
           AncestorType={x:Type TreeViewItem}},
           Path=(ItemsControl.AlternationIndex),
           Converter={StaticResource LeagueFontStyleConverter}}"/>
    </HierarchicalDataTemplate>

    <!--The HierarchicalDataTemplate used by TreeViewItems
     in the first level of the TreeView.-->
    <HierarchicalDataTemplate x:Key="Level1Data"
      ItemsSource="{Binding Path=Divisions}"
      ItemTemplate="{StaticResource Level2Data}"
      AlternationCount="2">
      <TextBlock Text="{Binding Path=Name}" FontWeight="Bold"/>
    </HierarchicalDataTemplate>

    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True"/>
    </Style>
  </StackPanel.Resources>

  <TreeView ItemsSource="{Binding Source={StaticResource MyTreeViewData}}"
            ItemTemplate="{StaticResource Level1Data}"/>
</StackPanel>

Комментарии

Свойства AlternationCount и ItemsControl.AlternationIndex позволяют указать внешний вид для двух или более чередующихся контейнеров элементов. Например, можно указать чередующиеся цвета фона для каждого третьего ItemsControlэлемента в . назначается ItemsControl.AlternationIndex каждому контейнеру ItemsControlэлементов в . ItemsControl.AlternationIndex начинается с 0, увеличивается AlternationCount до минус 1, а затем перезапускается с 0. Например, если AlternationCount имеет значение 3 и в элементе ItemsControlсодержится семь элементов , в следующей таблице перечислены ItemsControl.AlternationIndex элементы для каждого элемента.

Положение элемента в ItemsControl ItemsControl.AlternationIndex
1 0
2 1
3 2
4 0
5 1
6 2
7 0

При установке AlternationCount свойства вы указываете, что дочерние элементы должны получить ItemsControl.AlternationIndex объект в этом диапазоне, а не элемент, к которому он HierarchicalDataTemplate применяется. Например, если вызываемый HeaderedItemsControlaHeaderedItemsControl использует с набором AlternationCountHierarchicalDataTemplate, контейнеры элементов дочерних aHeaderedItemsControl элементов будут иметь ItemsControl.AlternationIndex, а не контейнер элементов для aHeaderedItemsControl.

Существует несколько методов, которые можно использовать для указания различных внешних видов для контейнеров переменных элементов. Одним из способов является привязка свойств контейнера элементов к объекту ItemsControl.AlternationIndex. Затем можно использовать AlternationConverter , чтобы указать, какое значение следует применить к контейнеру элементов, который имеет определенное ItemsControl.AlternationIndex значение. Триггеры также можно использовать для изменения значения свойства контейнера элементов в зависимости от его значения ItemsControl.AlternationIndex.

Применяется к