Member 13022351 Ответов: 2

Дерево как мне определить, когда пользователь меняет древовидном меню путем перетаскивания узлов


У меня есть TreeView, который пользователь может редактировать. Мне нужно знать, когда он меняется, чтобы я мог его сохранить. Я делаю добавления и удаления, так что это не проблема. Но пользователь также может реструктурировать дерево, перетаскивая узлы. Я не смог определить, какое событие(события) нужно слушать, чтобы сказать, когда это происходит.

Что я уже пробовал:

Я пробовал перетаскивать события, но они были неуместны. Я полагаю, что древовидное племя ест их само. Я рассматривал возможность подклассов TreeViewNode и переопределения всех дочерних членов IList, которые могли бы быть использованы в этом случае, но был уверен, что должен быть более цивилизованный способ.

2 Ответов

Рейтинг:
14

Member 13022351

Хотя сам TreeView не предоставляет никаких событий, указывающих на то, что пользователь изменил структуру дерева, элемент управления TreeView оборачивает элемент управления TreeViewList. Этот элемент управления действительно предоставляет события перетаскивания, такие как DragItemStarting. Итак, решение состоит в том, чтобы сделать это:

<Style TargetType="TreeView">
            <Setter Property="IsTabStop" Value="False" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TreeView">
                        <TreeViewList x:Name="ListControl"
                                      DragItemsCompleted="DragItemsCompleted"
                                      CanDragItems="True"
                                      AllowDrop="True"
                                      CanReorderItems="True">


Спасибо Sunteen Wu из Microsoft за ответ!


Рейтинг:
1

Dirk Bahle

Может быть, drag & drop не поддерживается для UWP TreeView?

Перетаскивание между treeview в uwp - Stack Overflow[^]


Member 13022351

UWP TreeView позволяет пользователю перемещать TreeViewNodes вокруг древовидной структуры с помощью перетаскивания. Он соответствующим образом реорганизует древовидную структуру. Например, пользователь может перетащить TreeViewNode от одного родителя к другому родителю, изменив таким образом древовидную структуру. Мой вопрос: как я могу сказать, когда это произошло? Я не смог найти никаких событий в TreeView, которые бы загорелись, когда это происходит.