想實現這樣一個常用功能:在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 } }
在不同控件中拖拽數據就這樣實現了,很簡單吧。