列表框即使列表已物品
我有一个列表框有几个项目,到时候没有滚动条上出现的一切ItemContainerGenerator返回null顺利完美罚款,但一旦谈到滚动然后ItemContainerGenerator返回null。列表框即使列表已物品
我读了一些博客,发现它可能是因为vertualization的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">
返回null。
这里firstContainer应该是第一个列表框元素。我验证了itemsControl是正确的,并且当firstContainer为null时它有项目。
DependencyObject firstContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(0);
一个相当多注意到的事情: 我看到这儿有8个列表框项的ItemsControl。 ItemContainerGenerator状态是* 集装箱生成*
不知道为什么它没有返回ItemsContainer 思考?
虚拟化意味着listboxitems只得到如果可见产生。因此,您无法使用ItemContainerGenerator获取未生成(不可见)列表框项目。
你真的需要直接在列表框的项目?它看起来像你的列表框是数据驱动的,所以直接使用数据。
我只是要回答同样的事情你说。 :) .. 嗯,我确实需要提供自定义拖动〜拖放支持的项目。 – Rohit 2011-04-20 13:37:03
虽然我能够解决上述问题,但在另一个问题中遇到了问题。在虚拟化为true的情况下,ScrollViewer - ViewPortHeight达到4.0(但是列表框的实际宽度比这大得多)。有没有解决这个问题? – Rohit 2011-04-20 13:38:40
你是说你想知道所有列表框项目的总高度?如果列表框被虚拟化,那么您将不会知道,因为不会生成不可见的项目。如果所有物品都具有相同的高度,那么您可以获得1个物品*物品数量的高度。 – 2011-04-21 13:02:15
我已经通过以下链接:http://drwpf.com/blog/2008/07/20/itemscontrol-g-is-for-generator/ – Rohit 2011-04-20 11:45:21