/// <summary> /// Dragging has ended, see if VM is IDiagramDesignerItem and notify of resizing end. /// </summary> void ResizeThumb_DragCompleted(object sender, DragCompletedEventArgs e) { if (!dragStarted) { return; } else { dragStarted = false; } DiagramItemsResizeInfo resizeInfo = diagramDesignerVM.CalcResizeInfo(this.selectedItemsVM, e.HorizontalChange, e.VerticalChange, direction.Value); diagramDesignerVM.ResizeElements(this.selectedItemsVM, resizeInfo); // remove drag adorner if (this.IsMouseCaptured) { this.ReleaseMouseCapture(); } AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this.diagramDesigner); if (adornerLayer != null) { adornerLayer.Remove(this.dragAdorner); } e.Handled = false; }
/// <summary> /// Resize item(s). /// </summary> void ResizeThumb_DragDelta(object sender, DragDeltaEventArgs e) { if (!dragStarted) { if (Math.Abs(e.HorizontalChange) >= MinDistanceToStart || Math.Abs(e.VerticalChange) >= MinDistanceToStart) { Start(); dragStarted = true; } } if (dragStarted) { if (diagramDesignerVM == null) { return; } // update position of the drag adorner DiagramItemsResizeInfo resizeInfo = diagramDesignerVM.CalcResizeInfo(this.selectedItemsVM, e.HorizontalChange, e.VerticalChange, direction.Value); if (selectedItemsVM.Count != dragCanvas.Children.Count) { return; } for (int i = 0; i < selectedItemsVM.Count; i++) { FrameworkElement elem = dragCanvas.Children[i] as FrameworkElement; if (elem != null) { elem.Margin = new System.Windows.Thickness( selectedItemsVM[i].AbsoluteLocation.X + resizeInfo.LeftChange, selectedItemsVM[i].AbsoluteLocation.Y + resizeInfo.TopChange, 0, 0); elem.Width = selectedItemsVM[i].Width + resizeInfo.WidthChange; elem.Height = selectedItemsVM[i].Height + resizeInfo.HeightChange; } } // update adorned element this.dragAdorner.Update(); } }