我有一个包含几个项目的列表框,直到没有滚动条出现之前一切都很好,但是一旦滚动条出现,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 为空时它有项目。
DependencyObject firstContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
另一件值得注意的事情:我看到 ItemsControl 中有 8 个列表框项。ItemContainerGenerator 状态显示 *容器已生成 *
不知道为什么它不返回 ItemsContainer Thoughts ??