【发布时间】:2011-09-20 02:16:30
【问题描述】:
我需要编写一个类似 excel 的网格,它可以有很多单元格 (400x400)。所有列的宽度相同,所有行的高度相同。每个单元格可以包含文本或为空,每个单元格可以有一个列和/或行跨度。我想这永远不会与Grid 面板一起工作,我想我需要在列和行方向上进行 UI 虚拟化。
所以我的第一次尝试是通过从VirtualizingPanel 派生并实现IScrollInfo 创建一个虚拟化网格。除了我遇到问题之外,这可能“很容易”成为解决方案:
为了向IScrollInfo 提供有关滚动大小和位置的相关信息,并能够确定接下来需要使用 ItemsContainerGenerator 创建(实现)哪些项目,我需要知道列索引、行索引和列跨度每个子项(单元格)。我能想到的唯一方法是使用附加属性。问题是:如果已经实现了具有附加属性的 ItemContainer,我只能读取附加属性的值。所以我在这里遇到了 22 个问题。要知道要实现什么,我需要实现所有项目。要为IScrollInfo 提供数据,我需要实现所有项目。
因此,我似乎在这种方法中处于死胡同。
您知道如何实现这样的控件或知道如何解决上述问题吗?
【问题讨论】:
-
您提到每行具有相同的高度,每列具有相同的宽度。似乎可以进行计算以计算滚动数据。您能否进一步解释为什么这会带来挑战?
-
是的,可以计算滚动数据。问题:网格中的任何地方都可能存在具有任意列和/或行跨度的单元格。我已经更新了我的问题。所以在滚动时,有时一个单元格不能完全适应当前视口。此外,我希望利用虚拟化技术,因为单元格可以拥有项目数据模板,这些模板绑定到单元格的视图模型,只有在它进入视图时才能实现。
标签: wpf grid virtualization