From b865e4e8b696f33c55998dd9cd0233e82bdb386c Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Mon, 3 Nov 2014 19:59:06 +0100 Subject: [PATCH] Border for Empty Image now fully working! --- .../Project/Controls/AdornerLayer.cs | 8 +- .../Extensions/BorderForImageControl.cs | 79 +++++++++---------- .../WpfDesign/Project/PlacementOperation.cs | 5 -- 3 files changed, 45 insertions(+), 47 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 b4e0a025a1..d3f6b61379 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/AdornerLayer.cs @@ -227,8 +227,12 @@ namespace ICSharpCode.WpfDesign.Designer.Controls 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); + var width = ((FrameworkElement) adorner.AdornedElement).Width; + width = width > 0 ? width : 2.0; + var height = ((FrameworkElement)adorner.AdornedElement).Height; + height = height > 0 ? height : 2.0; + var xOffset = rt.Matrix.OffsetX - (width / 2); + var yOffset = rt.Matrix.OffsetY - (height / 2); rt = new MatrixTransform(new Matrix(rt.Matrix.M11, rt.Matrix.M12, rt.Matrix.M21, rt.Matrix.M22, xOffset, yOffset)); } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs index 54d89a4329..16d56fe81b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/BorderForImageControl.cs @@ -17,59 +17,55 @@ // DEALINGS IN THE SOFTWARE. using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Linq; -using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using ICSharpCode.WpfDesign.Adorners; -using ICSharpCode.WpfDesign.Designer.Controls; using ICSharpCode.WpfDesign.Extensions; namespace ICSharpCode.WpfDesign.Designer.Extensions { - [ExtensionFor(typeof(Image))] - public class BorderForImageControl : PermanentAdornerProvider + [ExtensionFor(typeof(Image))] + public class BorderForImageControl : PermanentAdornerProvider { AdornerPanel adornerPanel; AdornerPanel cachedAdornerPanel; - Border border; - - protected override void OnInitialized() + Border border; + + protected override void OnInitialized() { base.OnInitialized(); - this.ExtendedItem.PropertyChanged += OnPropertyChanged; + this.ExtendedItem.PropertyChanged += OnPropertyChanged; - UpdateAdorner(); - } + UpdateAdorner(); + } - protected override void OnRemove() - { - this.ExtendedItem.PropertyChanged -= OnPropertyChanged; - base.OnRemove(); - } + protected override void OnRemove() + { + this.ExtendedItem.PropertyChanged -= OnPropertyChanged; + base.OnRemove(); + } - void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) - { - if (sender == null || e.PropertyName == "Width" || e.PropertyName == "Height") - { - ((DesignPanel) this.ExtendedItem.Services.DesignPanel).AdornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true); - } - } + void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (sender == null || e.PropertyName == "Width" || e.PropertyName == "Height") + { + ((DesignPanel) this.ExtendedItem.Services.DesignPanel).AdornerLayer.UpdateAdornersForElement(this.ExtendedItem.View, true); + } + } - void UpdateAdorner() + void UpdateAdorner() { var element = ExtendedItem.Component as UIElement; if (element != null) { - CreateAdorner(); - } + CreateAdorner(); + } } - + private void CreateAdorner() { if (adornerPanel == null) { @@ -80,9 +76,12 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions border = new Border(); border.BorderThickness = new Thickness(1); border.BorderBrush = new SolidColorBrush(Color.FromRgb(0xCC, 0xCC, 0xCC)); - border.Background = Brushes.Transparent; + border.Background = Brushes.Transparent; border.IsHitTestVisible = true; - border.MouseDown += border_MouseDown; + border.MouseDown += border_MouseDown; + border.MinWidth = 1; + border.MinHeight = 1; + AdornerPanel.SetPlacement(border, AdornerPlacement.FillContent); cachedAdornerPanel.Children.Add(border); } @@ -92,15 +91,15 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } } - void border_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) - { - if (!Keyboard.IsKeyDown(Key.LeftAlt) && ((Image) this.ExtendedItem.View).Source == null) - { - e.Handled = true; - this.ExtendedItem.Services.Selection.SetSelectedComponents(new DesignItem[] {this.ExtendedItem}, - SelectionTypes.Auto); - ((DesignPanel) this.ExtendedItem.Services.DesignPanel).Focus(); - } - } + void border_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) + { + if (!Keyboard.IsKeyDown(Key.LeftAlt) && ((Image) this.ExtendedItem.View).Source == null) + { + e.Handled = true; + this.ExtendedItem.Services.Selection.SetSelectedComponents(new DesignItem[] {this.ExtendedItem}, + SelectionTypes.Auto); + ((DesignPanel) this.ExtendedItem.Services.DesignPanel).Focus(); + } + } } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs index f217cbd41c..c878a4f605 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PlacementOperation.cs @@ -220,11 +220,6 @@ namespace ICSharpCode.WpfDesign if (element is FrameworkElement && size.Height < ((FrameworkElement)element).MinHeight) size.Height = ((FrameworkElement)element).Height; - if (element is FrameworkElement && size.Width == 0) - size.Width = element.DesiredSize.Width; - if (element is FrameworkElement && size.Height == 0) - size.Height = element.DesiredSize.Height; - return size; }