众所周知,WPF库里面的面板布局控件WrapPanel是非虚拟化的,在加载大量数据时,性能很差,因此网上提供了很多虚拟化的WrapPanel的实现方式,但大部分对其中包含的数据项都有固定宽度和高度的要求,也不能自动滚动到选择项。
这里推荐一个开源项目VirtualizingWrapPanel:
它有如下功能:
- 数据项可以设定为固定宽度和高度
- 数据项可以设定为可变宽度和高度
- 如果是可变宽度和高度,可以实现延迟布局
- 可滚动到指定位置
- 支持ListBox/ListView等集合控件,与WrapPanel的应用范围一致
- 支持数据分组
- 支持数据详细行,类似DataGrid中的详细行
下面是一些测试界面截图:
固定尺寸
可变尺寸
详细行
分组
通过我之前发布的博文:WPF ListBox滚动时固定组头-CSDN博客
还可以实现固定组头的功能。
为何特别提到对项的不同尺寸的支持,请看一下Windows的文件管理器:
网络上公开的一些代码实现的都是固定高度/宽度的文件浏览器,可变高度的几乎没有,而通过上面的开源项目,则能实现类似Windows的这个效果。