//mouse button is released public override void OnMouseUp(Canvas drawArea, MouseEventArgs e) { if (selectMode == SelectionMode.MulitSelection) { return; } int zoom = drawArea.Document.Zoom; if (selectMode == SelectionMode.NetSelection) { // Group selection drawArea.Document.SelectInRectangle(drawArea.NetRectangle); selectMode = SelectionMode.None; drawArea.DrawNetRectangle = false; UndoService.Commit(); } if (resizedObject != null || selectMode == SelectionMode.Size ) { // after resizing if (resizedObject != null) { resizedObject.BeginEdit(); if (resizedObject is ShapePaint) { ; // resizedObject.SetVirtualBounds(); } else { resizedObject.VirtualBounds = resizedObject.FormatBoundsByZoom(resizedObject.VirtualBounds, zoom); } resizedObject.EndEdit(); resizedObject = null; } selectMode = SelectionMode.None; UndoService.Commit(); } if (selectMode == SelectionMode.Move) { foreach (ShapeBase sb in drawArea.Document.SelectedShapes) { sb.BeginEdit(); if (sb is ShapeFigure //|| sb is ShapeLine ) { sb.SetVirtualBounds(); } else if (sb.Type != ShapeType.Line) { sb.VirtualBounds = sb.FormatBoundsByZoom(sb.VirtualBounds, zoom); } sb.EndEdit(); } selectMode = SelectionMode.None; Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y)); for (int i = drawArea.Document.Count - 1; i >= 0; i--) { if (drawArea.Document[i].HitTest(point) == 0) { ShapeBase so = drawArea.Document[i]; if (so != null) { // Unselect all if Ctrl is not pressed and clicked object is not selected yet if ((Control.ModifierKeys != Keys.Control || Control.ModifierKeys != Keys.Shift) && so.IsSelected && startPoint == lastPoint) { drawArea.Document.CancelSelect(true); so.IsSelected = true; } } break; } } UndoService.Commit(); } drawArea.Capture = false; drawArea.Refresh(); lastPoint = drawArea.BackTrackMouse(e.Location); }