WinUI/UWP实现类Notion块编辑器所需支持动态尺寸重排虚拟化列表控件咨询
结论
你没有遗漏主流的原生可选控件,目前WinUI/UWP生态没有完全开箱即用地满足你需求的列表控件,最适合作为二次开发基础的是ListView。
具体实现方案
针对你提到的ListView两个缺陷,可通过简单的自定义配置解决:
- 动态行高适配:将
ListView默认的虚拟化策略调整即可支持动态高度:- 设置
VirtualizingStackPanel.VirtualizationMode="Recycling" - 设置
VirtualizingStackPanel.ScrollUnit="Item" - 条目容器的
HorizontalContentAlignment设为Stretch
调整后条目高度会随内容自动计算,用户输入、窗口宽度变化导致的内容换行都会自动触发行高重算,不需要额外预计算逻辑。
- 设置
- 自定义拖拽触发区域:关闭
ListView默认的全局拖拽配置CanDragItems="False",仅在自定义条目模板的侧边::手柄元素上开启CanDrag="True",绑定对应条目的数据源索引后,自行实现Drop事件的条目重排逻辑即可,同时也支持多选后批量拖拽重排。
其他控件的排除原因
你调研的其余控件均不适合作为基础:
ItemsStackPanel仅为布局容器,本身不具备数据源绑定、条目事件管理等列表控件的基础能力,从零实现长列表逻辑工作量过大VariableSizedWrapGrid面向网格布局场景,和你单列堆叠的需求不匹配,旧版本的第三方虚拟化方案也不适配当前WinUI版本ItemsRepeater搭配带虚拟化的滚动容器也可实现需求,但拖拽重排、条目手势管理等逻辑都需要完全自研,工作量远大于修改ListViewDataGrid冗余能力过多,无原生行重排支持,改造成本极高
内容的提问来源于stack exchange,提问作者Ivan Mir
相关产品推荐
相关产品推荐

