/// <summary> /// The mouse cursor has been moved. /// </summary> protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (isDragging) { // // Raise the event to notify that dragging is in progress. // Point curMousePoint = e.GetPosition(this.ParentNetworkView); Vector offset = curMousePoint - lastMousePoint; if (offset.X != 0.0 && offset.Y != 0.0) { lastMousePoint = curMousePoint; RaiseEvent(new ConnectorItemDraggingEventArgs(ConnectorDraggingEvent, this, offset.X, offset.Y)); } e.Handled = true; } else if (isLeftMouseDown) { if (this.ParentNetworkView != null && this.ParentNetworkView.EnableConnectionDragging) { // // The user is left-dragging the connector and connection dragging is enabled, // but don't initiate the drag operation until // the mouse cursor has moved more than the threshold distance. // Point curMousePoint = e.GetPosition(this.ParentNetworkView); var dragDelta = curMousePoint - lastMousePoint; double dragDistance = Math.Abs(dragDelta.Length); if (dragDistance > DragThreshold) { // // When the mouse has been dragged more than the threshold value commence dragging the node. // // // Raise an event to notify that that dragging has commenced. // var eventArgs = new ConnectorItemDragStartedEventArgs(ConnectorDragStartedEvent, this); RaiseEvent(eventArgs); if (eventArgs.Cancel) { // // Handler of the event disallowed dragging of the node. // isLeftMouseDown = false; return; } isDragging = true; this.CaptureMouse(); e.Handled = true; } } } }
/// <summary> /// Event raised when the user starts to drag a connector. /// </summary> private void ConnectorItem_DragStarted(object source, ConnectorItemDragStartedEventArgs e) { this.Focus(); e.Handled = true; this.IsDragging = true; this.IsNotDragging = false; this.IsDraggingConnection = true; this.IsNotDraggingConnection = false; this.draggedOutConnectorItem = (ConnectorItem)e.OriginalSource; var nodeItem = this.draggedOutConnectorItem.ParentNodeItem; this.draggedOutNodeDataContext = nodeItem.DataContext != null ? nodeItem.DataContext : nodeItem; this.draggedOutConnectorDataContext = this.draggedOutConnectorItem.DataContext != null ? this.draggedOutConnectorItem.DataContext : this.draggedOutConnectorItem; // // Raise an event so that application code can create a connection and // add it to the view-model. // ConnectionDragStartedEventArgs eventArgs = new ConnectionDragStartedEventArgs(ConnectionDragStartedEvent, this, this.draggedOutNodeDataContext, this.draggedOutConnectorDataContext); RaiseEvent(eventArgs); // // Retrieve the the view-model object for the connection was created by application code. // this.draggingConnectionDataContext = eventArgs.Connection; if (draggingConnectionDataContext == null) { // // Application code didn't create any connection. // e.Cancel = true; return; } }