diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs index a2b9a6d59c..da4e767c12 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs @@ -189,30 +189,42 @@ namespace ICSharpCode.WpfDesign.Designer /// Enables / Disables the Snapline Placement /// private bool _useSnaplinePlacement = true; - public bool UseSnaplinePlacement - { + public bool UseSnaplinePlacement { get { return _useSnaplinePlacement; } - set { _useSnaplinePlacement = value; OnPropertyChanged("UseSnaplinePlacement"); } + set { + if (_useSnaplinePlacement != value) { + _useSnaplinePlacement = value; + OnPropertyChanged("UseSnaplinePlacement"); + } + } } /// /// Enables / Disables the Raster Placement /// private bool _useRasterPlacement = false; - public bool UseRasterPlacement - { + public bool UseRasterPlacement { get { return _useRasterPlacement; } - set { _useRasterPlacement = value; OnPropertyChanged("UseRasterPlacement"); } + set { + if (_useRasterPlacement != value) { + _useRasterPlacement = value; + OnPropertyChanged("UseRasterPlacement"); + } + } } /// /// Sets the with of the Raster when using Raster Placement /// private int _rasterWidth = 5; - public int RasterWidth - { + public int RasterWidth { get { return _rasterWidth; } - set { _rasterWidth = value; OnPropertyChanged("RasterWidth"); } + set { + if (_rasterWidth != value) { + _rasterWidth = value; + OnPropertyChanged("RasterWidth"); + } + } } #endregion diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RasterPlacementBehavior.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RasterPlacementBehavior.cs index 7cb41e6be4..9a65c01106 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RasterPlacementBehavior.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/RasterPlacementBehavior.cs @@ -13,21 +13,18 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions { public class RasterPlacementBehavior : DefaultPlacementBehavior { - int raster = 5; - Canvas surface; AdornerPanel adornerPanel; - private bool rasterDrawn = false; + bool rasterDrawn = false; + int raster = 5; public override void BeginPlacement(PlacementOperation operation) { base.BeginPlacement(operation); - - try { - raster = ((DesignPanel) ExtendedItem.Services.DesignPanel).RasterWidth; - } - catch (Exception ex) - { } + + DesignPanel designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; + if (designPanel != null) + raster = designPanel.RasterWidth; CreateSurface(operation); } @@ -79,7 +76,8 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions base.BeforeSetPosition(operation); if (surface == null) return; - if (!((DesignPanel) ExtendedItem.Services.DesignPanel).UseRasterPlacement) + DesignPanel designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; + if (designPanel == null || !designPanel.UseRasterPlacement) return; if (Keyboard.IsKeyDown(Key.LeftCtrl)) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs index b15c53b1fe..3280415aaf 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs @@ -59,7 +59,8 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions base.BeforeSetPosition(operation); if (surface == null) return; - if (!((DesignPanel)ExtendedItem.Services.DesignPanel).UseSnaplinePlacement) + DesignPanel designPanel = ExtendedItem.Services.DesignPanel as DesignPanel; + if (designPanel == null || !designPanel.UseSnaplinePlacement) return; surface.Children.Clear(); diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs index c4c61608f2..5a7e81211b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTestHelper.cs @@ -10,9 +10,11 @@ using System.Windows; using System.Windows.Media; using System.Windows.Controls; using System.Windows.Controls.Primitives; +using ICSharpCode.WpfDesign.Adorners; using NUnit.Framework; using ICSharpCode.WpfDesign.Designer; using ICSharpCode.WpfDesign.Designer.Xaml; +using Rhino.Mocks; namespace ICSharpCode.WpfDesign.Tests.Designer { @@ -35,6 +37,11 @@ namespace ICSharpCode.WpfDesign.Tests.Designer context.Services.Component.ComponentUnregistered += delegate(object sender, DesignItemEventArgs e) { log.AppendLine("Unregister " + ItemIdentity(e.Item)); };*/ + + // create required service mocks + var designPanel = MockRepository.GenerateStub(); + designPanel.Stub(dp => dp.Adorners).Return(new System.Collections.Generic.List()); + context.Services.AddService(typeof(IDesignPanel), designPanel); return context; } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj index 88d1aeb71d..e27fa13edb 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/WpfDesign.Tests.csproj @@ -43,6 +43,9 @@ + + ..\..\..\..\..\Libraries\RhinoMocks\Rhino.Mocks.dll + 4.0 diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs index 8ab32988a0..452ebd719d 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlDocument.cs @@ -24,7 +24,7 @@ namespace ICSharpCode.WpfDesign.XamlDom XamlTypeFinder _typeFinder; - int namespacePrefixCounter; + int namespacePrefixCounter; internal XmlDocument XmlDocument { get { return _xmlDoc; } @@ -173,14 +173,16 @@ namespace ICSharpCode.WpfDesign.XamlDom return new XamlTextValue(this, c.ConvertToInvariantString(ctx, instance)); } - string ns = GetNamespaceFor(elementType); - string prefix = GetPrefixForNamespace(ns); - - XmlElement xml = _xmlDoc.CreateElement(prefix, elementType.Name, ns); + string ns = GetNamespaceFor(elementType); + string prefix = GetPrefixForNamespace(ns); + + XmlElement xml = _xmlDoc.CreateElement(prefix, elementType.Name, ns); if (hasStringConverter && XamlObject.GetContentPropertyName(elementType) != null) { xml.InnerText = c.ConvertToInvariantString(instance); - } else if (instance is Brush) { //Todo: this is a hacky fix, because Brush Editor don't edit Design Items and so we have no XML, only the Brush Object and we need to Parse the Brush to XAML! + } else if (instance is Brush) { // TODO: this is a hacky fix, because Brush Editor doesn't + // edit Design Items and so we have no XML, only the Brush + // object and we need to parse the Brush to XAML! var s = new MemoryStream(); XamlWriter.Save(instance, s); s.Seek(0, SeekOrigin.Begin); @@ -212,48 +214,48 @@ namespace ICSharpCode.WpfDesign.XamlDom return _typeFinder.GetXmlNamespaceFor(type.Assembly, type.Namespace); } - internal string GetPrefixForNamespace(string @namespace) - { - if (@namespace == XamlConstants.PresentationNamespace) - { - return null; - } + internal string GetPrefixForNamespace(string @namespace) + { + if (@namespace == XamlConstants.PresentationNamespace) + { + return null; + } - string prefix = _xmlDoc.DocumentElement.GetPrefixOfNamespace(@namespace); + string prefix = _xmlDoc.DocumentElement.GetPrefixOfNamespace(@namespace); - if (String.IsNullOrEmpty(prefix)) - { - prefix = _typeFinder.GetPrefixForXmlNamespace(@namespace); + if (String.IsNullOrEmpty(prefix)) + { + prefix = _typeFinder.GetPrefixForXmlNamespace(@namespace); - string existingNamespaceForPrefix = null; - if (!String.IsNullOrEmpty(prefix)) - { - existingNamespaceForPrefix = _xmlDoc.DocumentElement.GetNamespaceOfPrefix(prefix); - } + string existingNamespaceForPrefix = null; + if (!String.IsNullOrEmpty(prefix)) + { + existingNamespaceForPrefix = _xmlDoc.DocumentElement.GetNamespaceOfPrefix(prefix); + } - if (String.IsNullOrEmpty(prefix) || - !String.IsNullOrEmpty(existingNamespaceForPrefix) && - existingNamespaceForPrefix != @namespace) - { - do - { - prefix = "Controls" + namespacePrefixCounter++; - } while (!String.IsNullOrEmpty(_xmlDoc.DocumentElement.GetNamespaceOfPrefix(prefix))); - } + if (String.IsNullOrEmpty(prefix) || + !String.IsNullOrEmpty(existingNamespaceForPrefix) && + existingNamespaceForPrefix != @namespace) + { + do + { + prefix = "Controls" + namespacePrefixCounter++; + } while (!String.IsNullOrEmpty(_xmlDoc.DocumentElement.GetNamespaceOfPrefix(prefix))); + } - string xmlnsPrefix = _xmlDoc.DocumentElement.GetPrefixOfNamespace(XamlConstants.XmlnsNamespace); - System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(xmlnsPrefix)); + string xmlnsPrefix = _xmlDoc.DocumentElement.GetPrefixOfNamespace(XamlConstants.XmlnsNamespace); + System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(xmlnsPrefix)); - _xmlDoc.DocumentElement.SetAttribute(xmlnsPrefix + ":" + prefix, @namespace); - - if (@namespace == XamlConstants.DesignTimeNamespace) - { - var ignorableProp = new XamlProperty(this._rootElement,new XamlDependencyPropertyInfo(MarkupCompatibilityProperties.IgnorableProperty,true)); - ignorableProp.SetAttribute(prefix); - } - } + _xmlDoc.DocumentElement.SetAttribute(xmlnsPrefix + ":" + prefix, @namespace); + + if (@namespace == XamlConstants.DesignTimeNamespace) + { + var ignorableProp = new XamlProperty(this._rootElement,new XamlDependencyPropertyInfo(MarkupCompatibilityProperties.IgnorableProperty,true)); + ignorableProp.SetAttribute(prefix); + } + } - return prefix; - } + return prefix; + } } }