Почему ListBox AlternationIndex всегда возвращает 0
Хорошо, я знаю, что есть несколько других подобных вопросов, но у меня есть реальная проблема с получением AlternationIndex для работы с ListBox или ListView.
мой xaml такой:
<ListBox BorderThickness="0" Name="RecentItemsListBox" HorizontalAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path=RecentFilesList}" AlternationCount="100">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex),
RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource IncCnvrtr}}"
Foreground="DimGray" FontSize="20" FontWeight="Bold"
HorizontalAlignment="Left" Margin="5,5,15,5" />
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{Binding ClassName}" Foreground="Black" />
<TextBlock Text="{Binding DisplayName}" Foreground="Black" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
преобразователь увеличивает значение на 1. Это отлично работает, и я отладил его, чтобы подтвердить, что значение, отправляемое в преобразователь, ВСЕГДА 0.
Сумасшедшая вещь, это только для ListBox или ListView
как только я изменяю его на ItemsControl, индексация корректна, но я не хочу элемент управления, я хочу список со всеми функциями, которые идут с ним.
Если у вас есть идеи относительно того, почему это может происходить, я был бы благодарен за вашу помощь.
Спасибо
Киран
1 ответ
За ListBox
или же ListView
вам нужно будет найти недвижимость на ListBoxItem
/ListViewItem
как показано ниже:
<TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex),
RelativeSource={RelativeSource AncestorType=ListBoxItem}, Converter={StaticResource IncCnvrtr}}"
Foreground="DimGray" FontSize="20" FontWeight="Bold"
HorizontalAlignment="Left" Margin="5,5,15,5" />
Разница связана с тем, что ItemsControl
генерирует только один ContentPresenter, который становится контейнером элемента, и тот же ContentPresenter
также загружает DataTemplate.
Но для ListBox
, ListBoxItem
являются контейнеры предметов и DataTemplate
будет загружен ContentPresenter
в Template
из ListBoxItem
, Так что ценность ListBoxItem
"s ItemsControl.AlternationIndex
свойство будет меняться в зависимости от индекса, но значение ItemsControl.AlternationIndex
собственность ContentPresenter
который загружает DataTemplate
всегда будет 0, что является значением по умолчанию.