1、拖拽需要实现的事件包括:
PreviewMouseLeftButtonDown
LBoxSort_OnDrop
具体实现如下:
private void LBoxSort_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var pos = e.GetPosition(LBoxSort); HitTestResult result = VisualTreeHelper.HitTest(LBoxSort, pos); if (result == null) { return; } var listBoxItem = Utils.FindVisualParent<ListBoxItem>(result.VisualHit); if (listBoxItem == null || listBoxItem.Content != LBoxSort.SelectedItem) { return; } DataObject dataObj = new DataObject(listBoxItem.Content as Person); DragDrop.DoDragDrop(LBoxSort, dataObj, DragDropEffects.Move); } private void LBoxSort_OnDrop(object sender, DragEventArgs e) { var pos = e.GetPosition(LBoxSort); var result = VisualTreeHelper.HitTest(LBoxSort, pos); if (result == null) { return; } //查找元数据 var sourcePerson = e.Data.GetData(typeof (Person)) as Person; if (sourcePerson == null) { return; } //查找目标数据 var listBoxItem = Utils.FindVisualParent<ListBoxItem>(result.VisualHit); if (listBoxItem == null) { return; } var targetPerson = listBoxItem.Content as Person; if (ReferenceEquals(targetPerson, sourcePerson)) { return; } _persons.Remove(sourcePerson); _persons.Insert(_persons.IndexOf(targetPerson), sourcePerson); } }