ListBox ItemContainerGenerator возвращает ноль, даже если в списке есть элементы

У меня есть список с парой элементов, пока не появится полоса прокрутки, все будет отлично, но как только полоса прокрутки появится, ItemContainerGenerator вернет ноль.

Я прочитал некоторые блоги и обнаружил, что это может быть из-за вертикализации стека панели. Если я отключу это, то это может сработать, но в моем случае это сделает список слишком тяжелым и менее эффективным.

Вот код для списка:

 <ListBox x:Name="EventListBox"
          DockPanel.Dock="Top"
          Margin="5,5,5,5"
          FocusVisualStyle="{x:Null}"
          ItemsSource="{Binding EventModelViewCollectionView}"
          Style="{StaticResource DefaultListBoxStyle}"
          ItemTemplate="{StaticResource EventTemplate}"
          SelectedItem="{Binding EventModelViewCollection.SelectedItem}"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ScrollViewer.VerticalScrollBarVisibility="Auto"
          ScrollViewer.CanContentScroll="True"
          ScrollViewer.IsDeferredScrollingEnabled="False"
          ScrollViewer.ScrollChanged="EventScrollViewer_ScrollChanged"
          IsSynchronizedWithCurrentItem="True"
          Loaded="ListBox_Unloaded">

Это возвращает ноль.

Здесь firstContainer должен быть первым элементом списка. Я проверил, что itemsControl является правильным, и у него есть элементы, когда firstContainer равен нулю.

DependencyObject firstContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(0);

Еще одна довольно заметная вещь: я увидел, что в ItemsControl есть 8 элементов списка. Состояние ItemContainerGenerator говорит * Контейнер создан *

Не знаю, почему это не возвращает ItemsContainer Мысли??

1 ответ

Решение

Виртуализация означает, что элементы listbox генерируются только если они видны. Таким образом, вы не можете использовать ItemContainerGenerator для получения не сгенерированных (не видимых) элементов списка.

Вы действительно нуждаетесь в элементе списка непосредственно? Похоже, ваш список работает с данными, поэтому работайте с данными напрямую.

Другие вопросы по тегам