Aks*_*elK 5 wpf treeview drag-and-drop
我正在通过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"
...
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
然后在节点之前/之后显示插入装饰器.On Drop在之前(父节点的子节点)或节点之后(兄弟节点)创建新节点.
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |