You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF:多ItemsControls共享单滚动条的虚拟化实现求助

多ItemsControl共享滚动条的虚拟化解决方案

推荐NuGet包

  • VirtualizingWrapPanel:专门优化了固定高度项的虚拟化场景,支持把多个ItemsControl整合到同一个滚动上下文里,实现统一的虚拟化加载,不用自己写复杂的CustomVirtualizingPanel。
  • Extended.Wpf.Toolkit:里面的VirtualizingItemsControl扩展组件,能将多个子ItemsControl纳入统一的虚拟化管理,适配你这种大部分项高度一致的场景。

关键实现步骤

  1. 给所有子ItemsControl设置统一的项高度(对应包的ItemHeight属性),让虚拟化容器能准确计算可视区域内需要加载的项。
  2. 把所有ItemsControl放到同一个由包提供的统一虚拟化容器中,替代原生的ScrollViewer或者嵌套在ScrollViewer内,确保滚动偏移量共享。
  3. 关闭每个ItemsControl自身的虚拟化(设置VirtualizingStackPanel.IsVirtualizing="False"),让外层的统一虚拟化容器接管所有项的虚拟化逻辑,避免重复虚拟化导致的性能问题。

简单示例

<ScrollViewer>
    <virtualizing:UnifiedVirtualizingPanel>
        <ItemsControl ItemsSource="{Binding FirstItemList}" virtualizing:UnifiedVirtualizingPanel.ItemHeight="50">
            <ItemsControl.ItemTemplate>
                <!-- 自定义项模板 -->
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <ItemsControl ItemsSource="{Binding SecondItemList}" virtualizing:UnifiedVirtualizingPanel.ItemHeight="50">
            <ItemsControl.ItemTemplate>
                <!-- 自定义项模板 -->
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </virtualizing:UnifiedVirtualizingPanel>
</ScrollViewer>

内容的提问来源于stack exchange,提问作者Spuddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:58:17