有条件地拖放/可重新排列TreeView

问题描述 投票:0回答:1

我在 UWP 应用程序中设置可拖放树视图时遇到问题,用户可以对树中的项目进行重新排序。有一个演示应用程序,我用它来满足我的需要。 (https://github.com/chingucoding/TreeViewConditionalReorderSample

拖放就像一个魅力,但是,如果我启用重新排序,我无法检查条件。这是一个简单的例子:

- Group 1
-- Leaf 1.1
-- Leaf 1.2
-- Leaf 1.3
- Group 2
-- SubGroup 2.1
-- SubGroup 2.2
--- Leaf 2.2.1
- Group 3

因此,条件始终相同,允许用户在没有子项或仅叶子的每个组上删除叶子,而允许用户仅在组上和仅在没有子项的组或具有的组上删除组只是一群孩子。

现实世界:我想显示食谱的“目录”,因此允许用户将食谱放在类别中并将类别分组到更大的类别中。 ;)

那么,我的确切问题是什么:拖放的工作方式与 Charme 类似,但如果允许用户对树中的项目重新排序,他将能够在“Group 2.1”和“Group 2.2”之间对“Leaf 1.1”进行排序。我没有收到任何事件来阻止这种下降。

c# uwp-xaml
1个回答
0
投票

从 TreeViewItem 派生,设置AllowDrop = true,并在派生的 TreeViewItem (tvi) 中设置对 TreeView 的引用。在 OnDragEnter、OnDragOver、OnDragLeave 和 OnDrop 重写中测试放置和重新排序的条件,定义局部变量 canReorder 和 canDrop。然后在每个覆盖中,设置 tvi.TreeView.CanReorderItems = canReorder,并设置 args.AllowedOperation = (canDrop? args.DataView.RequestedOperation: DataPackageOperation.None)。然后调用基函数。

如果拖动的项目(存储在 args.DataView 中的 TreeView 的 DragItemsStarting 处理程序)可以放置在当前实体(存储在 tvi.DataContext 中)上方的父实体中,我建议允许重新排序。

© www.soinside.com 2019 - 2024. All rights reserved.