private void AssociatedObject_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { var element = GetSenderDiagram(sender) ?? sender as UIElement; if (element == null) { return; } DrawLineAdorner adorner = GetDraggingLineAdorner(element); Point point = WPFUtility.GetMousePosition(element); if (adorner != null) { adorner.Position = point; } }
private void AssociatedObject_PreviewMouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Released) { return; } //use the connection object base on ConnectionDiagramBase var element = GetSenderDiagram(sender) ?? sender as UIElement; if (element == null) { return; } Point point = e.GetPosition(element as UIElement); Point startPoint = (element as ConnectionDiagramBase)?.CenterPosition ?? new Point(0, 0); //change the draw line center position int centerradius = (element as ConnectionDiagramBase)?.CenterPositionRadius ?? 0; if (!WPFUtility.IsCenterDragging(startPoint, point, centerradius)) { return; } if (!WPFUtility.IsDragging(startPoint, point)) { return; } DrawLineAdorner adorner = new DrawLineAdorner(element, 0.7, point); SetDraggingLineAdorner(element, adorner); DataObject data = new DataObject(); //set the adorner for drop action and create the clone element. data.SetData(typeof(UIElement), element); data.SetData(typeof(DrawLineAdorner), adorner); ICommand dragcommand = GetDragLineCommand(element); //cann't drag without command if (dragcommand != null) { object parameter = GetDragLineCommandParameter(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(); SetDraggingLineAdorner(element, null); }
/// <summary> /// Sets the value of the DraggingLineAdorner attached property /// for a given dependency object. /// </summary> /// <param name="obj">The object to which the property value /// is written.</param> /// <param name="value">Sets the DraggingLineAdorner value of the specified object.</param> public static void SetDraggingLineAdorner(DependencyObject obj, DrawLineAdorner value) { obj.SetValue(DraggingLineAdornerProperty, value); }