Я заполняю TreeView через XmlDataProvider и уже реализовал функциональность Drag-and-drop, так что я могу перемещать узлы вокруг и бросать узлы из других мест.
Но я реализовал только самую простую форму; когда вы бросаете узел, он вставляется в качестве дочернего узла в узел, на который он брошен. Эта функциональность работает так, как задумано. Но я также хочу иметь возможность бросить элемент между двумя узлами, чтобы он стал дочерним узлом.
Как мне решить эту проблему?
В настоящее время я использую HierarchicalDataTemplate, с панелью StackPanel:
<HierarchicalDataTemplate x:Key="XmlTreeTemplate">
<HierarchicalDataTemplate.ItemsSource>
<Binding XPath="child::node()" />
</HierarchicalDataTemplate.ItemsSource>
<StackPanel
AllowDrop="True"
DragEnter="StackPanelDragEnter"
DragLeave="StackPanelDragLeave"
DragOver="StackPanelDragOver"
...
Событие Drop происходит на TreeView.