スクロールバーが表示されなくなるまで、いくつかの項目を含むリストボックスがありますが、スクロールバーが表示されると、ItemContainerGenerator は null を返します。
いくつかのブログを読んだところ、スタックパネルの仮想化が原因である可能性があることがわかりました。それを無効にするとうまくいくかもしれませんが、私の場合、リストボックスが重くなりすぎて効率が悪くなります。
リストボックスのコードは次のとおりです。
<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">
これは null を返します。
ここで、firstContainer は最初のリストボックス要素である必要があります。itemsControl が正しく、firstContainer が null の場合に項目があることを確認しました。
DependencyObject firstContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
もう 1 つ注目すべき点は、ItemsControl に 8 つのリストボックス項目があることです。ItemContainerGenerator のステータスは * Container Generated *と表示されます
ItemsContainer Thoughts を返さない理由がわかりません??