ListBox 中的分组、虚拟化和滚动

Dan*_*iel 3 wpf xaml

使用以下代码 ListBox 在滚动期间跳转到下一组。由于一组显示的项目多于屏幕可以容纳的数量,因此用户永远不会看到该组的所有项目。由于我有很多项目,我需要虚拟化。

设置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 />
Run Code Online (Sandbox Code Playgroud)

Wal*_*her 5

尝试使用该ScrollUnit=Pixel属性来平滑滚动。默认值是ScrollUnit=Item使组作为一个单位滚动。

<ListBox             
         VirtualizingPanel.IsVirtualizing='True'
         VirtualizingPanel.IsVirtualizingWhenGrouping='True'
         VirtualizingPanel.ScrollUnit='Pixel'
         />
Run Code Online (Sandbox Code Playgroud)