diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs index 6dd91b6590..75d432d950 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls /// /// A control that displays adorner panels. /// - sealed class AdornerLayer : Panel + public sealed class AdornerLayer : Panel { #region AdornerPanelCollection internal sealed class AdornerPanelCollection : ICollection, IReadOnlyCollection @@ -218,26 +218,24 @@ namespace ICSharpCode.WpfDesign.Designer.Controls } return new Size(0, 0); } - + protected override Size ArrangeOverride(Size finalSize) { foreach (AdornerPanel adorner in this.Children) { - if (adorner.AdornedElement.IsDescendantOf(_designPanel)) { - adorner.RenderTransform = (Transform)adorner.AdornedElement.TransformToAncestor(_designPanel); - } + if (adorner.AdornedElement.IsDescendantOf(_designPanel)) + { + var rt = (MatrixTransform) adorner.AdornedElement.TransformToAncestor(_designPanel); + if (adorner.AdornedDesignItem != null && adorner.AdornedDesignItem.Parent != null && adorner.AdornedDesignItem.Parent.View is Canvas && adorner.AdornedElement.RenderSize.Height == 0 && adorner.AdornedElement.RenderSize.Width == 0) + { + var xOffset = rt.Matrix.OffsetX - (((FrameworkElement)adorner.AdornedElement).Width / 2); + var yOffset = rt.Matrix.OffsetY - (((FrameworkElement)adorner.AdornedElement).Height / 2); + rt = new MatrixTransform(new Matrix(rt.Matrix.M11, rt.Matrix.M12, rt.Matrix.M21, rt.Matrix.M22, xOffset, yOffset)); + } - //Fix Adorner Display of Image (or maybe other components...) - - var size = adorner.DesiredSize; - //if (size.Height==0 && size.Width==0 && adorner.AdornedElement is FrameworkElement) - // size = new Size(((FrameworkElement)adorner.AdornedElement).Width, ((FrameworkElement)adorner.AdornedElement).Height); - - //if (double.IsNaN(size.Width)) - // size.Width = 0; - //if (double.IsNaN(size.Height)) - // size.Height = 0; + adorner.RenderTransform = rt; + } - adorner.Arrange(new Rect(new Point(0, 0), size)); + adorner.Arrange(new Rect(new Point(0, 0), adorner.DesiredSize)); } return finalSize; } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs index 17a1663c29..d1e10016cc 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/CanvasPositionHandle.cs @@ -146,7 +146,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls if (double.IsNaN(wr)) { wr = (double) rightDescriptor.GetValue(adornedControl); - wr = canvas.ActualWidth - (adornedControl.ActualWidth + wr); + wr = canvas.ActualWidth - (PlacementOperation.GetRealElementSize(adornedControl).Width + wr); } else { @@ -167,7 +167,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls if (double.IsNaN(wr)) { wr = (double)bottomDescriptor.GetValue(adornedControl); - wr = canvas.ActualHeight - (adornedControl.ActualHeight + wr); + wr = canvas.ActualHeight - (PlacementOperation.GetRealElementSize(adornedControl).Height + wr); } else { @@ -188,7 +188,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls if (double.IsNaN(wr)) { wr = (double) leftDescriptor.GetValue(adornedControl); - wr = canvas.ActualWidth - (adornedControl.ActualWidth + wr); + wr = canvas.ActualWidth - (PlacementOperation.GetRealElementSize(adornedControl).Width + wr); } else { @@ -209,7 +209,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls if (double.IsNaN(wr)) { wr = (double)topDescriptor.GetValue(adornedControl); - wr = canvas.ActualHeight - (adornedControl.ActualHeight + wr); + wr = canvas.ActualHeight - (PlacementOperation.GetRealElementSize(adornedControl).Height + wr); } else { diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml index f6deec886b..a7c17a86a2 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/ControlStyles.xaml @@ -2,7 +2,7 @@ - +