diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs index 0f45fd9f4c..c8f4ce5760 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/CanvasPlacementSupport.cs @@ -147,6 +147,11 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions info.Item.Properties[FrameworkElement.HorizontalAlignmentProperty].Reset(); info.Item.Properties[FrameworkElement.VerticalAlignmentProperty].Reset(); info.Item.Properties[FrameworkElement.MarginProperty].Reset(); + + if (operation.Type == PlacementType.PasteItem) { + info.Item.Properties.GetAttachedProperty(Canvas.LeftProperty).SetValue(((double)info.Item.Properties.GetAttachedProperty(Canvas.LeftProperty).ValueOnInstance) + PlacementOperation.PasteOffset); + info.Item.Properties.GetAttachedProperty(Canvas.TopProperty).SetValue(((double)info.Item.Properties.GetAttachedProperty(Canvas.TopProperty).ValueOnInstance) + PlacementOperation.PasteOffset); + } } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs index cbd2ad1baa..e5a78cf63e 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/GridPlacementSupport.cs @@ -162,6 +162,26 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions enteredIntoNewContainer=true; grid.UpdateLayout(); base.EnterContainer(operation); + + if (operation.Type == PlacementType.PasteItem) { + foreach (PlacementInformation info in operation.PlacedItems) { + var margin = (Thickness)info.Item.Properties.GetProperty(FrameworkElement.MarginProperty).ValueOnInstance; + var horizontalAlignment = (HorizontalAlignment)info.Item.Properties.GetProperty(FrameworkElement.HorizontalAlignmentProperty).ValueOnInstance; + var verticalAlignment = (VerticalAlignment)info.Item.Properties.GetProperty(FrameworkElement.VerticalAlignmentProperty).ValueOnInstance; + + if (horizontalAlignment == HorizontalAlignment.Left) + margin.Left += PlacementOperation.PasteOffset; + else if (horizontalAlignment == HorizontalAlignment.Right) + margin.Right -= PlacementOperation.PasteOffset; + + if (verticalAlignment == VerticalAlignment.Top) + margin.Top += PlacementOperation.PasteOffset; + else if (verticalAlignment == VerticalAlignment.Bottom) + margin.Bottom -= PlacementOperation.PasteOffset; + + info.Item.Properties.GetProperty(FrameworkElement.MarginProperty).SetValue(margin); + } + } } GrayOutDesignerExceptActiveArea grayOut; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs index be2964d11a..96af34fa59 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlEditOperations.cs @@ -179,7 +179,7 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml var operation = PlacementOperation.TryStartInsertNewComponents(parent, pastedItems, rects.ToList(), PlacementType.PasteItem); ISelectionService selection = _context.Services.Selection; selection.SetSelectedComponents(pastedItems); - if(operation!=null) + if(operation != null) operation.Commit(); } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs index 931b393c66..4d9b70fa5e 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs @@ -38,6 +38,8 @@ namespace ICSharpCode.WpfDesign IPlacementBehavior currentContainerBehavior; bool isAborted, isCommitted; + public const double PasteOffset = 10; + #region Properties /// /// The items being placed.