private void AssociatedObject_MouseMove(object sender, MouseEventArgs e) { UIElement element = sender as UIElement; if (e.LeftButton == MouseButtonState.Released) { element.SetValue(StartPointProperty, null); } if (element.GetValue(StartPointProperty) == null) { return; } Point startPoint = (Point)element.GetValue(StartPointProperty); Point point = e.GetPosition(element as UIElement); if (!WPFUtility.IsDragging(startPoint, point)) { return; } DraggingAdorner adorner = new DraggingAdorner(element, 0.5, point); SetDragAdorner(element, adorner); DataObject data = new DataObject(); //set the adorner for drop action and create the clone element. data.SetData(typeof(DraggingAdorner), adorner); data.SetData(typeof(UIElement), element); ICommand dragcommand = GetDragCommand(element); //cann't drag without command if (dragcommand != null) { object parameter = GetDragCommandParameter(element); // ?? this.AssociatedObject.DataContext; if (parameter != null) { data.SetData(DataFormats.Serializable, parameter); } if (dragcommand.CanExecute(parameter)) { dragcommand.Execute(parameter); DragDrop.DoDragDrop(element, data, DragDropEffects.Copy | DragDropEffects.Move); } } adorner.Remove(); SetDragAdorner(element, null); }
private void AssociatedObject_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { UIElement element = sender as UIElement; DraggingAdorner adorner = GetDragAdorner(element); Point point = WPFUtility.GetMousePosition(element); if (adorner != null) { adorner.Position = point; } }
public static void SetDragAdorner(DependencyObject obj, DraggingAdorner value) { obj.SetValue(DragAdornerProperty, value); }