From 10b427cfaffa3a83ac87525f4e214873dacb4ec6 Mon Sep 17 00:00:00 2001 From: Matt Ward <ward.matt@gmail.com> Date: Sun, 28 Nov 2010 19:09:32 +0000 Subject: [PATCH] Fix SD-1657 - Grid adorner - File no longer marked as dirty when just moving the mouse over the column header. --- .../Project/Controls/GridAdorner.cs | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs index 53aee95b0e..23a5f166ae 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/GridAdorner.cs @@ -433,34 +433,37 @@ namespace ICSharpCode.WpfDesign.Designer.Controls public void SetGridLengthUnit(GridUnitType unit) { DesignItem item = unitSelector.SelectedItem; - GridLength value; - grid.UpdateLayout(); Debug.Assert(item != null); if (orientation == Orientation.Vertical) { - value = (GridLength)item.Properties[RowDefinition.HeightProperty].ValueOnInstance; - - if (unit == GridUnitType.Auto) - value = GridLength.Auto; - else - value = new GridLength(value.Value, unit); - - item.Properties[RowDefinition.HeightProperty].SetValue(value); + SetGridLengthUnit(unit, item, RowDefinition.HeightProperty); } else { - value = (GridLength)item.Properties[ColumnDefinition.WidthProperty].ValueOnInstance; - - if (unit == GridUnitType.Auto) - value = GridLength.Auto; - else - value = new GridLength(value.Value, unit); - - item.Properties[ColumnDefinition.WidthProperty].SetValue(value); + SetGridLengthUnit(unit, item, ColumnDefinition.WidthProperty); } grid.UpdateLayout(); InvalidateVisual(); } + + void SetGridLengthUnit(GridUnitType unit, DesignItem item, DependencyProperty property) + { + DesignItemProperty itemProperty = item.Properties[property]; + GridLength oldValue = (GridLength)itemProperty.ValueOnInstance; + GridLength value = GetNewGridLength(unit, oldValue); + + if (value != oldValue) { + itemProperty.SetValue(value); + } + } + + GridLength GetNewGridLength(GridUnitType unit, GridLength oldValue) + { + if (unit == GridUnitType.Auto) { + return GridLength.Auto; + } + return new GridLength(oldValue.Value, unit); + } } public abstract class GridSplitterAdorner : Control