总体的实现并不复杂。msdn中有专题介绍,还有不少例子。
我把拖拽分为三类:
1. 在同一WPF窗口内拖拽,应用场景有:
a) 拖拽改变控件大小
b) 移动控件
c) 在不同容器中移动控件(比如在资源管理其中移动文件)
How can I drag and drop items between data bound ItemsControls-
2. 在WPF窗口和其他程序中拖拽,应用场景:
a) 打开文件
b) 保存文件(需外部程序支持)
3. 在同一WPF程序的不同窗口中拖拽,应用场景:
没想出什么太典型的。
第1,2类在MSDN中都有例子。Drag and Drop Samples
第3类也不是很复杂。
主要都是通过设置控件
AllowDrop属性,
DragEnter,DragOver,DragLeave和Drop事件实现的。还有GiveFeedback事件,不过比较少用。
不过目前有一个难点:如果在拖拽的时候显示被拖拽对象的缩略图(Thumbnail)
比如上图的样式。但是在MSDN中例子里你只能看到类似下面的图标。
现在正在研究这个问题。
对于第3类问题比较好办。因为完全都是自己的程序,可以创建一个小窗口跟随鼠标移动,作为缩略图。
难办的是1,2类,都需要跟外部程序,比如资源管理器,交互。
在Google上搜索 wpf drag-and-drop thumbnail。(了解一些术语的英文名称,因为一般中文很难找到很专业的技术文档)。
找到了下面一个牛人系列文章。
Shell Style Drag and Drop in .NET (WPF and WinForms)
明天用到程序中试试看。