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

时间:2011-01-20 09:20:12

标签: wpf xaml layout virtualization

我正在寻找在固定行数和任意数量的列中呈现相同大小的元素的方法。 (想想iTunes'或Picasa的专辑视图。我相信有些平台将此称为'gridview')

WrapPanel可以完成这项工作,但是我绑定了大量的对象,所以我需要虚拟化。

我一直在寻找网络,并找到了商业上可用的VirtualizationWrapPanels和博客文章,了解如何实现自己的VirtualizationPanel,但我似乎无法找到任何更简单的解决方案。< / p>

是否可以使用标准WPF组件在网格样式视图(固定行数)中安排虚拟化数据绑定项?

3 个答案:

答案 0 :(得分:1)

我最近不得不进行类似功能的搜索,并努力寻找生产就绪的任何东西。

我发现了一系列包含虚拟化平铺面板的文章和示例代码

http://blogs.msdn.com/b/dancre/archive/tags/virtualizingtilepanel/

我一直在使用它并且相当稳定。但是需要做出一些改变。我们不得不在面板中添加一些键盘控制,因为它没有实现,需要更改标签以及调整平铺尺寸等。如果您决定自己动手,这是一个很好的起点。

但一个主要的警告是,它必须有一个受限于有限大小的父级,否则它会出错。这通常不是问题,因为您希望它的大小有限,因此您可以启用滚动。这个特定问题可能有解决办法,但我们没有时间进行调查。我们刚刚将其作为技术债务提出,因为它实际上并不影响我们当前的形式。

答案 1 :(得分:1)

快速而肮脏的解决方案是使用“分组项目”(在您的情况下为垂直项目)的列表(在您的情况下为水平项目),这将确定所需的行数。虚拟化将发生在“石斑鱼”上。

答案 2 :(得分:0)

小组有责任提供虚拟化。不幸的是,框架只提供虚拟化StackPanel:

http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.aspx

有一篇非常好的博客文章提供虚拟化WrapPanel:

http://blogs.claritycon.com/blog/2009/09/16/custom-panels-in-silverlight-wpf-part-4-virtualization/

另一种方法是使用DataGrid,这将为您虚拟化。