static void DropTarget_PreviewDragOver(object sender, DragEventArgs e) { DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo); IDropTarget dropHandler = GetDropHandler((UIElement)sender); ItemsControl itemsControl = sender as ItemsControl; if (dropHandler != null) { dropHandler.DragOver(dropInfo); } else { DefaultDropHandler.DragOver(dropInfo); } // Update the drag adorner. if (dropInfo.Effects != DragDropEffects.None) { if (DragAdorner == null && m_DragInfo != null) { CreateDragAdorner(); } if (DragAdorner != null) { DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement); DragAdorner.InvalidateVisual(); } } else { DragAdorner = null; } // If the target is an ItemsControl then update the drop target adorner. if (itemsControl != null) { // Display the adorner in the control's ItemsPresenter. If there is no // ItemsPresenter provided by the style, try getting hold of a // ScrollContentPresenter and using that. UIElement adornedElement = (UIElement)itemsControl.GetVisualDescendent<ItemsPresenter>() ?? (UIElement)itemsControl.GetVisualDescendent<ScrollContentPresenter>(); if (adornedElement != null) { if (dropInfo.DropTargetAdorner == null) { DropTargetAdorner = null; } else if (!dropInfo.DropTargetAdorner.IsInstanceOfType(DropTargetAdorner)) { DropTargetAdorner = DropTargetAdorner.Create(dropInfo.DropTargetAdorner, adornedElement); } if (DropTargetAdorner != null) { DropTargetAdorner.DropInfo = dropInfo; DropTargetAdorner.InvalidateVisual(); } } } e.Effects = dropInfo.Effects; e.Handled = true; Scroll((DependencyObject)sender, e); }
static void DropTarget_PreviewDrop(object sender, DragEventArgs e) { DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo); IDropTarget dropHandler = GetDropHandler((UIElement)sender) ?? DefaultDropHandler; IDragSource dragHandler = GetDragHandler((UIElement)sender) ?? DefaultDragHandler; DragAdorner = null; DropTargetAdorner = null; dropHandler.Drop(dropInfo); dragHandler.Dropped(dropInfo); dropHandler.DragLeave(dropInfo); e.Handled = true; }
static void DropTarget_PreviewDragLeave(object sender, DragEventArgs e) { DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo); IDropTarget dropHandler = GetDropHandler((UIElement)sender); if (dropHandler != null) { dropHandler.DragLeave(dropInfo); } DragAdorner = null; DropTargetAdorner = null; }