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
            }
        }

 

在不同控件中拖拽数据就这样实现了,很简单吧。

posted @ 2013-07-28 00:01  太古月石  阅读(4184)  评论(0编辑  收藏  举报