示例:在WPF ListBox中,ScrollViewer.CanContentScroll=“False“破坏虚拟化如何解决

一、目的:分享一个解决ListBox设置了ScrollViewer.CanContentScroll="False"破坏虚拟坏的解决方法

ScrollViewer.CanContentScroll 是 WPF 中 ScrollViewer 控件的一个属性,它决定了滚动内容时是按逻辑单位(如项)还是按物理单位(如像素)进行滚动。

• 当 CanContentScroll 设置为 True 时,滚动是基于逻辑单位的。这意味着滚动操作会移动一个完整的内容项,而不是按照像素滚动。这种模式下,如果你的 ScrollViewer 包含了一个虚拟化面板(如 VirtualizingStackPanel),它可以启用 UI 虚拟化,这是一种性能优化技术,只渲染可见项,从而提高大量数据展示的性能。

• 当 CanContentScroll 设置为 False 时,滚动是基于物理单位的,即像素。这提供了更平滑的滚动体验,但是会渲染所有的项,包括那些不在视图中的项,这可能会对性能产生负面影响,特别是在项数量很多的情况下。

因此,选择 CanContentScroll 的值时,需要根据你的具体需求来决定。如果你需要更平滑的滚动体验,并且数据量不大,可以选择 False。如果你需要展示大量数据,并且关心性能,应该选择 True,并确保使用支持虚拟化的面板,如 VirtualizingStackPanel。

本文介绍的方式是,支持虚拟话并且可以按像素滚动

二、实现

XML 复制代码
<ListBox ScrollViewer.CanContentScroll="True" 
         VirtualizingPanel.ScrollUnit="Pixel">
</ListBox>

ScrollViewer.CanContentScroll="True"
VirtualizingPanel.ScrollUnit="Pixel"

**注意:**ScrollViewer.CanContentScroll="True" 需要设置成True,否则会破坏虚拟化;

五、需要了解的知识点

ScrollViewer.CanContentScroll Property (System.Windows.Controls) | Microsoft Learn

VirtualizingPanel.ScrollUnit Attached Property (System.Windows.Controls) | Microsoft Learn

ListBox 类 (System.Windows.Controls) | Microsoft Learn

VirtualizingStackPanel 类 (System.Windows.Controls) | Microsoft Learn

VirtualizingPanel 类 (System.Windows.Controls) | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关推荐
weixin_727535624 小时前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
liuxiaowei37 小时前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf
贺国亚1 天前
模型训练-分布式与GPU调度
分布式·wpf
不羁的木木2 天前
HarmonyOS技术精讲-Connectivity Kit:实战——多屏协同与文件快传应用
华为·wpf·harmonyos
某不知名網友2 天前
C++ 从零实现负载均衡式在线 OJ 判题系统|分布式沙箱判题实战
wpf
fogota2 天前
【AI】C# .NET8 WPF 第三方DLL引用配置(编译不丢失、不自动删除)
c#·.net·wpf·dll
不羁的木木2 天前
HarmonyOS技术精讲-Connectivity Kit(短距通信服务):初识统一短距通信框架
华为·wpf·harmonyos
慧都小妮子4 天前
SciChart WPF v9.0 更新详解:矢量场图表、堆叠箱线图与 MVVM 轴同步来了
c#·.net·wpf·数据可视化·图表控件·图表
He BianGu4 天前
【笔记】WPF中 Brush 的类型、继承关系、使用方式和注意事项
笔记·wpf
FuckPatience6 天前
WPF GridView 列绑定时前端没有属性提示
wpf