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 } }
在不同控件中拖拽数据就这样实现了,很简单吧。