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

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

上一篇:HDU-6125-Friend-Graph-2017CCPC网络赛(图论,拉姆齐定理-组合数学)


下一篇:YOU种你来丨i春秋校园行第一站北京电子科技学院