统一安排儿童的虚拟化面板
Virtualized panel that arranges children uniformly
我正在尝试使用一个 GridView
来统一安排它的子项,很像 Community Toolkit 的 UnifromGrid
,但是一个虚拟化的。
我不能使用 GridView
的默认 Itemspanel
的原因是我认为它由第一个单元格决定所有其他单元格的大小,看这个:
请注意右侧的空白区域,并且尺寸较大的项目将按照第一个项目的大小进行裁剪。
我尝试使用 `UniformGrid',但它不是虚拟化的,而且我的应用程序实际上有时会遇到问题,并且当有很多项目时变得非常迟钝。
我还尝试扩展 VirtualizingPanel
以创建自定义 Panel
,但是 it's not possible for now.
我现在可以做些什么来解决这个问题吗?
谢谢。
使用 Windows 社区工具包中的 AdaptiveGridView
control 怎么样?它将允许您根据可用宽度自动调整项目的大小。然而,使项目完全正方形将是一个挑战,因为它会随着 window 扩展的方式改变宽度。
选项 1:
如果您不介意固定大小的单元格,您可以在 ItemsPanel 上指定它。
<GridView>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" ItemHeight="200" ItemWidth="200"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
选项 2:
在 Microsoft 的 WinUI NuGet 预发布版本中,有一个名为 "Repeater" 的新列表控件,与它的 "UniformGridLayout" 一起可以为所欲为。
目前您可以在此处的 XamlControlsGallery 存储库中找到此示例:https://github.com/Microsoft/Xaml-Controls-Gallery/blob/master/XamlControlsGallery/ControlPages/ItemsRepeaterPage.xaml
请注意,这仍是预发布版本,因此文档非常少,并且控件表面积可能会更改(事实上,已经更改了几次)。 Repeater 也不是 Selector 或 ListView 的子项,因此您失去了自动 ItemContainers、SelectionModes、ItemClicking 等。您必须根据需要手动添加它们 - repeater 本质上是一个新的列表呈现基础 class更类似于 ItemsControl 而不是 GridView 或 ListView。
这需要注意 - 虚拟化仅在 17763 SDK 及更高版本上本地运行 - 在较低版本的 SDK 上,您还需要使用 ScrollAnchorProvider 来启用虚拟化,如示例的第 110 行所示。
我正在尝试使用一个 GridView
来统一安排它的子项,很像 Community Toolkit 的 UnifromGrid
,但是一个虚拟化的。
我不能使用 GridView
的默认 Itemspanel
的原因是我认为它由第一个单元格决定所有其他单元格的大小,看这个:
请注意右侧的空白区域,并且尺寸较大的项目将按照第一个项目的大小进行裁剪。
我尝试使用 `UniformGrid',但它不是虚拟化的,而且我的应用程序实际上有时会遇到问题,并且当有很多项目时变得非常迟钝。
我还尝试扩展 VirtualizingPanel
以创建自定义 Panel
,但是 it's not possible for now.
我现在可以做些什么来解决这个问题吗? 谢谢。
使用 Windows 社区工具包中的 AdaptiveGridView
control 怎么样?它将允许您根据可用宽度自动调整项目的大小。然而,使项目完全正方形将是一个挑战,因为它会随着 window 扩展的方式改变宽度。
选项 1: 如果您不介意固定大小的单元格,您可以在 ItemsPanel 上指定它。
<GridView>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" ItemHeight="200" ItemWidth="200"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
选项 2: 在 Microsoft 的 WinUI NuGet 预发布版本中,有一个名为 "Repeater" 的新列表控件,与它的 "UniformGridLayout" 一起可以为所欲为。
目前您可以在此处的 XamlControlsGallery 存储库中找到此示例:https://github.com/Microsoft/Xaml-Controls-Gallery/blob/master/XamlControlsGallery/ControlPages/ItemsRepeaterPage.xaml
请注意,这仍是预发布版本,因此文档非常少,并且控件表面积可能会更改(事实上,已经更改了几次)。 Repeater 也不是 Selector 或 ListView 的子项,因此您失去了自动 ItemContainers、SelectionModes、ItemClicking 等。您必须根据需要手动添加它们 - repeater 本质上是一个新的列表呈现基础 class更类似于 ItemsControl 而不是 GridView 或 ListView。
这需要注意 - 虚拟化仅在 17763 SDK 及更高版本上本地运行 - 在较低版本的 SDK 上,您还需要使用 ScrollAnchorProvider 来启用虚拟化,如示例的第 110 行所示。