ListBox ItemContainerGenerator возвращает ноль, даже если в списке есть элементы - PullRequest
4 голосов
/ 20 апреля 2011

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

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

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

 <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 имеет значение null.

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

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

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

1 Ответ

4 голосов
/ 20 апреля 2011

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

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

...