本节主要在上节的基础上实现拖拽改变父子节点层级的功能,效果如下:

1、添加全局变量
private Point lastMouseDownPoint;//上一次鼠标左键点击位置
private TreeViewNode targetNode;//目标节点
2、在TreeView控件中加入MouseLeftButtonDown事件
/// <summary>
/// 鼠标左键按下事件响应
/// </summary>
private void TreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
lastMouseDownPoint = e.GetPosition(this.treeView);
}
}
3、在TreeViewItem样式中加入拖拽相关事件
<EventSetter Event="DragEnter" Handler="TreeView_DragEnter"></EventSetter>
<EventSetter Event="DragLeave" Handler="TreeView_DragLeave"></EventSetter>
<EventSetter Event="DragOver" Handler="TreeView_DragEnter"></EventSetter>
<EventSetter Event="Drop" Handler="TreeView_Drop"></EventSetter>
<EventSetter Event="MouseMove" Handler="TreeView_MouseMove"></EventSetter>
相关事件源码:
/// <summary>
/// 拖拽进入,改变字体颜色
/// </summary>
private void TreeView_DragEnter(object sender, DragEventArgs e)
{
TreeViewItem container = GetNearestContainer(e.OriginalSource as UIElement);
if (container != null)
{
container.Foreground = new SolidColorBrush(Colors.Orange);
}
}
/// <summary>
/// 拖拽离开,恢复成原来的字体颜色
/// </summary>
priva

该博客详细介绍了如何在WPF的TreeView中实现拖拽功能,以改变父子节点的层级关系。通过添加全局变量、响应MouseLeftButtonDown事件以及在TreeViewItem样式中设置拖拽事件,实现了拖放操作。文章还提到了系列教程的其他部分,包括自定义样式、数据源绑定、动态添加节点、右键菜单功能以及节点重命名。
最低0.47元/天 解锁文章
1555





