protected override void OnPreviewMouseUp(MouseButtonEventArgs e) { if (IsMouseCaptured) { ReleaseMouseCapture(); } var adornerLayer = AdornerLayer.GetAdornerLayer(_itemsPanel); adornerLayer?.Remove(this); if (_drawableInstance == null) { return; } _drawableInstance.Y2 = _endPoint.Value.Y; _drawableInstance.X2 = _endPoint.Value.X; _drawableInstance.Left = Math.Min(_drawableInstance.X1, _drawableInstance.X2); _drawableInstance.Top = Math.Min(_drawableInstance.Y1, _drawableInstance.Y2); var width = Math.Abs(_drawableInstance.X1 - _drawableInstance.X2); var height = Math.Abs(_drawableInstance.Y1 - _drawableInstance.Y2); CreateDrawableInstance(width, height); _designerPanel.AddItem(_drawableInstance); _designerPanel.SelectionService.SelectItem(_drawableInstance); e.Handled = true; }
private static void OnDesignerDrop(object sender, DragEventArgs e) { if (e.Data.GetData(typeof(DragObject)) is DragObject dragObject && dragObject.DataContextType != null) { if (Activator.CreateInstance(dragObject.DataContextType) is IDesignerItem element) { Point position = e.GetPosition(_itemsPanel); element.Parent = _designerViewModel; element.ZIndex = _designerViewModel.Items.Count; element.TransformOrigin = new Point(0.5, 0.5); element.MinHeight = 10; element.MinWidth = 10; if (dragObject.DesiredSize.HasValue) { Size desiredSize = dragObject.DesiredSize.Value; element.Width = desiredSize.Width; element.Height = desiredSize.Height; element.Left = Math.Max(0, position.X - element.Width / 2); element.Top = Math.Max(0, position.Y - element.Height / 2); } else { element.Left = Math.Max(0, position.X); element.Top = Math.Max(0, position.Y); } _designerViewModel.AddItem(element); _designerViewModel.SelectionService.SelectItem(element); } } e.Handled = true; }