羊蹓狼 发表于 2022-9-16 17:24:19

WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

概述
本文描述WPF的拖放功能(Drag and Drop)。
拖放功能涉及到两个功能,一个就是拖,一个是放。拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放。假设界面上有两个控件,一个TreeView,一个ListView,那么可能发生的拖动有以下几种情况:
1、TreeView -> ListView
2、ListView -> TreeView 
3、TreeView -> TreeView 
4、ListView -> ListView
对于拖的控件需要在鼠标移动事件中检测左键按下并启动拖动操作;对于放的控件需要处理Drop等事件来接收数据。如果是在控件内部拖动,则以上两个动作都要处理。
为简便起见,本文就以ListView拖动到TreeView为例进行讲解。 
 

在拖与放的控件之间一定会有数据传递,我们可以设计一个类型来进行数据传输,由于ListView本身就是绑定到一个对象列表的,我就把选中的对象字节拿来传递了,没有额外定义类型。
    public class ListViewAdvNodeItem
    {
      public string Title {get;set;}      
   
    } listView.ItemsSource的数据类型为:BindableCollection ListViewAdvNodeItems,通过this.listView.SelectedItem可以得到的数据类型即为:ListViewAdvNodeItem
 设计代码如下:
    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView> 在listView_MouseMove事件中,我们将启动拖动功能。
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   private void listView_MouseMove(object sender, MouseEventArgs e)       {
         if (sender is ListView listview
    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>         && e.LeftButton == MouseButtonState.Pressed
    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>         && listview.SelectedItem != null)    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>DragDrop.DoDragDrop(listview, listview.SelectedItem, DragDropEffects.Move);    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }      } 通过DragDrop.DoDragDrop方法启动拖动,该方法有三个参数:
1、发起拖动的控件
2、传输的数据(这里是一个ListViewAdvNodeItem类型的对象)
3、拖动的类型,一般为Move或Copy
 

下面就要在TreeView控件中处理放的事件了
设计代码:
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> 首先要设置AllowDrop="True",然后重点处理DragDrop.Drop事件:
      private void treeView_Drop(object sender, DragEventArgs e)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> if (e.Data.GetData(typeof(ListViewAdvNodeItem)) is ListViewAdvNodeItem fromListNode)    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>if (e.OriginalSource is TextBlock txtTitle)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>{ if (txtTitle.Tag is Excerpt toExcerpt)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      //处理业务    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    }    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>}    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>}在处理Drop事件时,我们需要知道两件事情,1:拖来的是什么数据?2、放哪里了?
首先,通过e.Data.GetData(typeof(ListViewAdvNodeItem))就可以获得数据来源,这里GetData得到的对象就是上面的 listview.SelectedItem;
其次,通过e.OriginalSource 我们将获得数据放在哪里的问题。这段代码很难理解,要回头看一下TreeView的ItemTemplate定义
    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>从这个模板定义可以看出,TreeView中用来显示Title的控件是一个TextBlock,然后这个TextBlock的Tag属性上还绑定了一个业务对象。
再回头看上面一段代码,就可以看出具体的逻辑:当鼠标放开时,其所指的对象是一个TextBlock,然后取到这个TextBlock的Tag对象,里面包含了我想要的业务数据。
到此拖放功能就完成了。
为了更好的展现效果,我们可以对拖放的目标进行判断,对于一些不能放的位置显示禁止拖放的图标,这时就需要处理DragOver事件了
      private void treeView_DragOver(object sender, DragEventArgs e)      {   //判断是否允许拖动    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView> e.Effects = DragDropEffects.None;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> if (e.Data.GetData(typeof(ListViewAdvNodeItem)) is ListViewAdvNodeItem fromListNode)    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>if (e.OriginalSource is TextBlock txtTitle)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>{    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    if (txtTitle.Tag is Excerpt toExcerpt)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      if (CanDrop(fromListNode.Excerpt, toExcerpt))  //业务判断    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> e.Effects = DragDropEffects.Move;    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      }    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    }    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>}    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>}    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>e.Handled = true;      }  
装饰器
如果拖动时,有下面这样的一个标签跟随鼠标移动,其显示内容是拖动对象的Title,效果就更好了。
https://img2022.cnblogs.com/blog/18393/202208/18393-20220826154021346-505123310.png
这个就需要通过装饰器来实现。
关于装饰器的介绍:装饰器概述 - WPF .NET Framework | Microsoft Docs
首先我们建一个装饰器对象DragTitleAdorner
https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttps://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif    public class DragTitleAdorner : Adorner    {      private readonly ContentPresenter _contentPresenter;      private Control Control      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> get    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>return (Control)this.AdornedElement;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }      }      public DragTitleAdorner(UIElement adornedElement, Point pos, string? Title = "") : base(adornedElement)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> IsHitTestVisible = false;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> int width = 22;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> if (Title != null)    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>width += (int)MeasureTextWidth(Title, 14, "宋体");    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> this._contentPresenter = new ContentPresenter    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>Content = new Border    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>{    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    Background = Brushes.SteelBlue,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    Width = width,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    Height = 28,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    BorderBrush = Brushes.Gray,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    BorderThickness = new Thickness(1),    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    HorizontalAlignment = HorizontalAlignment.Left,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    VerticalAlignment = VerticalAlignment.Top,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    CornerRadius= new CornerRadius(5),    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    Child = new TextBlock    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      Text = Title,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      FontSize = 14,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      FontFamily= new FontFamily("宋体"),    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      Foreground = Brushes.White,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      HorizontalAlignment = HorizontalAlignment.Left,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      VerticalAlignment = VerticalAlignment.Center,    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      Margin = new Thickness(10, 0, 0, 0),    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    },    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>},    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> };    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> double left = pos.X;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> double top = pos.Y;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> this.Margin = new Thickness(left + 5, top + 10, 0, 0);      }      #region Override      protected override int VisualChildrenCount      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> get    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>return 1;    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }      }      protected override Visual GetVisualChild(int index) // replace the Visual of the TextBox with the visual of the _contentPresenter;      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> return this._contentPresenter;      }      protected override Size MeasureOverride(Size constraint)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> this._contentPresenter.Measure(this.Control.RenderSize); // delegate the measure override to the ContentPresenter's Measure    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> return this.Control.RenderSize;      }      protected override Size ArrangeOverride(Size finalSize)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> this._contentPresenter.Arrange(new Rect(finalSize));    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> return finalSize;      }      #endregion Override      privatedouble MeasureTextWidth(string text, double fontSize, string fontFamily)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> FormattedText formattedText = new FormattedText(    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> text,    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> System.Globalization.CultureInfo.InvariantCulture,    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> FlowDirection.LeftToRight,    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> new Typeface(fontFamily.ToString()),    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> fontSize,    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> Brushes.Black    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> );    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> return formattedText.WidthIncludingTrailingWhitespace;      }    }View Code在构造这个对象时,我们将传入两个重要的参数:Point pos 和 string Title ,这两个参数决定了它在何处显示什么内容。
程序用代码构建了一个Border,其内有一个TextBlock,并通过pos参数来控制了它的位置。
下面,在treeView_DragOver事件中显示这个装饰器即可。
      private void treeView_DragOver(object sender, DragEventArgs e)      {    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> if (e.Data.GetData(typeof(ListViewAdvNodeItem)) is ListViewAdvNodeItem fromListNode)    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView> //显示装饰器    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this.treeView);    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>if (adornerLayer != null)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>{    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    Adorner[] adorners = adornerLayer.GetAdorners(this.treeView);    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    if (adorners != null)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      foreach (var adorner in adorners)    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      {    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> adornerLayer.Remove(adorner);    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>      }    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    }    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    DragTitleAdorner _adorner = new DragTitleAdorner(this.treeView, pos, fromListNode.Excerpt?.Title);    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>    adornerLayer.Add(_adorner);    <ListView x:Name="listView"    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   
    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>   Mouse.MouseMove="listView_MouseMove" >      
    </ListView>}    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView> }    <TreeView x:Name="treeView"               
            AllowDrop="True"
            DragDrop.Drop="treeView_Drop"
            DragDrop.DragOver="treeView_DragOver"
            DragDrop.DragEnter="treeView_DragEnter"
            DragDrop.DragLeave="treeView_DragLeave" >   
    </TreeView>e.Handled = true;      } 更多信息请参考文末源码。
  
资源
系列目录:WPF开发快速入门【0】前言与目录 
代码下载:Learn WPF: WPF学习笔记 (gitee.com)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)