XAML WPF使用虚拟化在网格中排列项目

bzzcjhmw  于 2022-12-07  发布在  其他
关注(0)|答案(3)|浏览(145)

我正在寻找一种方法,以固定的行数和任意的列数来呈现相同大小的元素。(想想iTunes或Picasa的专辑视图。我相信一些平台将其称为“网格视图”)
一个WrapPanel就可以完成这项工作,但是我绑定的对象集合非常大,所以我需要虚拟化。
我一直在网上寻找,找到了商业上可用的VirtualizationWrapPanels和关于如何实现自己的VirtualizationPanel的博客文章,但我似乎找不到任何更简单的解决方案。
是否可以使用标准WPF组件在网格样式视图(固定行数)中排列虚拟化的数据绑定项?

6kkfgxo0

6kkfgxo01#

我最近不得不寻找类似的功能,并努力找到任何生产准备。
我找到了一个series of articles和包含Virtualizing Tile Panel示例代码。
我一直在使用它,它已经相当稳定。有一些变化,需要作出虽然。我们不得不添加一些键盘控制到面板,因为它没有实现,制表符需要改变,以及调整瓷砖大小,等等。这是一个很好的起点,如果你决定推出自己的。
一个主要的警告是,它也必须有一个限制大小的父文件,否则它会出错。这通常不是一个问题,因为你会希望它的大小受到限制,以便您可以启用滚动。可能有一个解决这个特定问题的方法,但我们没有时间调查。

zy1mlcev

zy1mlcev2#

一个快捷的解决方案是使用一个“分组项”列表(在您的情况下是水平的)(在您的情况下是垂直的),它将确定所需的行数。虚拟化将发生在“分组”上。

cnjp1d6j

cnjp1d6j3#

提供虚拟化是Panel的责任。遗憾的是,框架仅提供虚拟化StackPanel:
http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.aspx
这里有一篇很好的博客文章提供了一个虚拟化的WrapPanel:
https://blogs.claritycon.com/custom-panels-in-silverlight-wpf-part-4-virtualization-7f3bded02587
另一种选择是使用DataGrid,这将为您实现虚拟化。

相关问题