使用以下代码ListBox在滚动期间跳转到下一个组。由于一个组显示的项目多于可以适合屏幕的项目,因此用户永远不会看到该组的所有项目。 由于我有很多项目,我需要viritualization。
设置CanContentScroll="False"
修复了问题,但虚拟化已经消失,UI挂起20秒。有办法解决这个问题吗?
<ListBox
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="True">
<ListBox.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Type}" />
...
</StackPanel>
</Expander.Header>
<ItemsPresenter />
答案 0 :(得分:2)
尝试使用ScrollUnit=Pixel
属性进行平滑滚动。默认值为ScrollUnit=Item
,这会导致组作为一个单元滚动。
<ListBox
VirtualizingPanel.IsVirtualizing='True'
VirtualizingPanel.IsVirtualizingWhenGrouping='True'
VirtualizingPanel.ScrollUnit='Pixel'
/>