【发布时间】:2021-06-29 18:21:54
【问题描述】:
我正在尝试在 WinUI/UWP 应用程序中实现类似于 Notion 或 Craft 的文档编辑器。这些应用程序没有使用“单字段”编辑器(如 MS Word 那样),而是显示垂直堆栈的内容行(所谓的“块”),其中可以包含文本、媒体、链接预览、LaTeX 等。这些行可以用侧面的:: 句柄重新排列:
所以我一直在寻找一些列表/堆栈控件:
- 回收不可见的行视图(即 XAML 术语中的“虚拟化”)。
- 允许通过拖放(单个或多个)对行重新排序。
- 根据内容高度的增长或缩小自动调整行高(由于用户的输入或应用的窗口水平调整大小并包裹了一些内容)。
我确实不需要需要的功能:标题、列、排序、过滤。我已经查看了 WinUI 2.x 和 Windows Community Toolkit 中的以下控件,但看起来它们中的每一个都缺少一个或多个必需的功能。
ListView
它似乎是拖放列表的首选控件,但它不能动态调整项目的大小。此外,它的拖动使用了整个项目区域,而我需要使其仅在侧面带有 :: 句柄时可用。
ItemsStackPanel
StackPanel 的虚拟化支持版本,但据我了解,面板应该用于子项的简单布局,而不是用于基于数据源呈现长列表。
VariableSizedWrapGrid
这是唯一一个官方声明支持可变大小项目的列表/网格控件,但同时不支持虚拟化。但是,我发现了一个solution from 2013,它基于预先计算不可见元素的内容大小。
ItemsRepeater
一个非常基本的控件,它本身不提供虚拟化:“ItemsRepeater 在连接到支持虚拟化的主机时支持虚拟化。”
DataGrid
来自 WCT 的相当重的控制,这似乎是 dynamically resize cells 的唯一一个,具体取决于其内容。不幸的是,它不允许行重新排序(仅排序),所以我也不能使用它。
我错过了什么吗?如果没有,我想知道哪一个是最好的基础。谢谢!
【问题讨论】:
标签: uwp uwp-xaml windows-community-toolkit winui variablesizedwrapgrid