From 7fd896abad064fee805be3e74dfd2b90ec4b6ae3 Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Mon, 27 Oct 2014 22:16:03 +0100 Subject: [PATCH] More fies for Image COntrol, Container Enter,... --- .../Project/Controls/AdornerLayer.cs | 30 ++++++------- .../Project/Controls/CanvasPositionHandle.cs | 8 ++-- .../Project/Controls/ControlStyles.xaml | 27 +++++++++-- .../WpfDesign.Designer/Project/Converters.cs | 34 +++++++++++++- .../WpfDesign.Designer/Project/DesignPanel.cs | 17 +++++-- .../Extensions/BorderForImageControl.cs | 45 ++++++++++--------- .../Extensions/BorderForInvisibleControl.cs | 8 ++-- .../Extensions/DefaultPlacementBehavior.cs | 11 +++-- .../Extensions/RotateThumbExtension.cs | 5 +-- .../Project/Extensions/SkewThumbExtension.cs | 10 +++-- .../WpfDesign/Project/PlacementOperation.cs | 16 ++++++- 11 files changed, 143 insertions(+), 68 deletions(-) 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 @@ - +