我正在通过 XmlDataProvider 填充 TreeView,并且已经实现了拖放功能,因此我可以四处移动节点,并从其他位置放置节点。
但我只实现了最简单的形式;当你放下时,它作为一个子节点插入到它被放下的节点上。此功能按预期工作。但我也希望能够在两个节点之间放置一个项目,以便它成为一个兄弟节点。
我应该如何着手解决这个问题?
目前我正在使用带有 StackPanel 的 HierarchicalDataTemplate:
<HierarchicalDataTemplate x:Key="XmlTreeTemplate">
<HierarchicalDataTemplate.ItemsSource>
<Binding XPath="child::node()" />
</HierarchicalDataTemplate.ItemsSource>
<StackPanel
AllowDrop="True"
DragEnter="StackPanelDragEnter"
DragLeave="StackPanelDragLeave"
DragOver="StackPanelDragOver"
...
Drop 事件发生在 TreeView 上。
最佳答案
在 DragOver 期间,您可以使用此方法确定鼠标位置是在 TreeView 节点上方还是下方:
public static bool IsInFirstHalf(FrameworkElement container, Point mousePosition, Orientation orientation)
{
if (orientation == Orientation.Vertical)
{
return mousePosition.Y < container.ActualHeight / 2;
}
return mousePosition.X < container.ActualWidth / 2;
}
然后在节点之前/之后显示一个插入装饰器。
在 Drop 之前(父节点的子节点)或之后(兄弟节点)创建一个新节点。
关于wpf - 在 TreeView 中拖放,在节点之间插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297384/