wpf中如何实现控件的拖拽

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf中如何实现控件的拖拽相关的知识,希望对你有一定的参考价值。

想实现这样一个常用功能:在ListBox的一个Item上点住左键,然后拖拽到另外一个控件(如ListView中),松开左键,数据已经拖拽过来。
步骤如下:
1. 设置ListBox 的AllowDrop属性为True
2. 在ListBoxItem 的Style中设置EventSetter

<Style x:Key="MyListBoxItemStyle" TargetType="x:Type ListBoxItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/>
</Style>

3. 实现ListBoxItem_PreviewMouseLeftButtonDown

private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e)

ListBoxItem item = (sender as Control) as ListBoxItem;
if (item != null )

DataObject dataObject = new DataObject(item.DataContext);
DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy);//启动拖拽



4. 在目的控件也将AllowDrop的属性设为True,然后实现目的控件的Drop Event

private void ***Control_Drop(object sender, DragEventArgs e)

// 注册Drop事件用来接收数据。
IDataObject data = new DataObject();
data = e.Data;
object obj = data.GetData(typeof(YourDataContext));

if (obj != null)

Do your job

参考技术A Microsoft.Expression.Interactions.dll 你上网下载这个
实例化一个 MouseDragElementBehavior对象
MouseDragElementBehavior.Attach(你要拖动的控件)
然后就可以了
还有一些DragFinished 之类的事件 你可以自己玩玩,挺好用的
参考技术B DragDrop.DoDragDrop() 参考技术C 响应控件的MouseDown, DragEnter, DragLeave, DragOver, Drop事件即可。

以上是关于wpf中如何实现控件的拖拽的主要内容,如果未能解决你的问题,请参考以下文章

WPF这可能是全网最全的拖拽实现方法的总结

C#中利用WPF如何实现控件的旋转?以控件的中心旋转

VB.net 实现TreeView控件的拖拽事件

THREE.js如何实现在x,y,z轴上的拖拽

求助,WPF如何实现控件的拖动与复制

WPF实现鼠标拖动控件并带有中间动效