From fec443288fae4c306c10fc6b0c487d4e10f4b45c Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Fri, 21 Nov 2014 18:25:35 +0100 Subject: [PATCH] Renaming of Controls -> Bindings and x:References are fixed --- .../Project/Xaml/XamlDesignItem.cs | 89 ++++++++++--------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs index ffa14b434b..119b71f456 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs @@ -72,9 +72,9 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml _xamlObject.Name = newName; - //FixReferencesOnNameChange(oldName, Name); + FixDesignItemReferencesOnNameChange(oldName, Name); } - + public override string Name { get { return _xamlObject.Name; } set { @@ -89,14 +89,15 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml } } - public void FixReferencesOnNameChange(string oldName, string newName) + /// + /// Fixes {x:Reference and {Binding ElementName to this Element in XamlDocument + /// + /// + /// + public void FixDesignItemReferencesOnNameChange(string oldName, string newName) { - var root = this.Parent; - while (root.Parent != null) - root = root.Parent; - - var references = GetAllChildDesignItems(((XamlDesignItem)root).XamlObject).Where(x => x.ElementType == typeof(Reference) && Equals(x.FindOrCreateProperty("Name").ValueOnInstance, oldName)); - + var root = GetRootXamlObject(this.XamlObject); + var references = GetAllChildXamlObjects(root).Where(x => x.ElementType == typeof(Reference) && Equals(x.FindOrCreateProperty("Name").ValueOnInstance, oldName)); foreach (var designItem in references) { var property = designItem.FindOrCreateProperty("Name"); @@ -105,8 +106,8 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml property.PropertyValue = propertyValue; } - var bindings = GetAllChildDesignItems(((XamlDesignItem)root).XamlObject).Where(x => x.ElementType == typeof(Binding) && Equals(x.FindOrCreateProperty("ElementName").ValueOnInstance, oldName)); - + root = GetRootXamlObject(this.XamlObject, true); + var bindings = GetAllChildXamlObjects(root, true).Where(x => x.ElementType == typeof(Binding) && Equals(x.FindOrCreateProperty("ElementName").ValueOnInstance, oldName)); foreach (var designItem in bindings) { var property = designItem.FindOrCreateProperty("ElementName"); @@ -116,44 +117,44 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml } } - private IEnumerable GetAllChildDesignItems(XamlObject item) + /// + /// Find's the Root XamlObject (real Root, or Root Object in Namescope) + /// + /// + /// + /// + private XamlObject GetRootXamlObject(XamlObject item, bool onlyFromSameNamescope = false) { - //if (item.ContentProperty != null) - //{ - // if (item.ContentProperty.Value != null) - // { - // yield return item.ContentProperty.Value; - - // foreach (var i in GetAllChildDesignItems(item.ContentProperty.Value)) - // { - // yield return i; - // } - // } - - // if (item.ContentProperty.IsCollection) - // { - // foreach (var collectionElement in item.ContentProperty.CollectionElements) - // { - // yield return collectionElement; - - // foreach (var i in GetAllChildDesignItems(collectionElement)) - // { - // yield return i; - // } - // } - // } - //} + var root = item; + while (root.ParentObject != null) + { + if (onlyFromSameNamescope && NameScopeHelper.GetNameScopeFromObject(root) != NameScopeHelper.GetNameScopeFromObject(root.ParentObject)) + break; + root = root.ParentObject; + } + return root; + } + /// + /// Get's all Child XamlObject Instances + /// + /// + /// + /// + private IEnumerable GetAllChildXamlObjects(XamlObject item, bool onlyFromSameNamescope = false) + { foreach (var prop in item.Properties) { if (prop.PropertyValue as XamlObject != null) { - yield return prop.PropertyValue as XamlObject; + if (!onlyFromSameNamescope || NameScopeHelper.GetNameScopeFromObject(item) == NameScopeHelper.GetNameScopeFromObject(prop.PropertyValue as XamlObject)) + yield return prop.PropertyValue as XamlObject; - foreach (var i in GetAllChildDesignItems(prop.PropertyValue as XamlObject)) + foreach (var i in GetAllChildXamlObjects(prop.PropertyValue as XamlObject)) { - yield return i; + if (!onlyFromSameNamescope || NameScopeHelper.GetNameScopeFromObject(item) == NameScopeHelper.GetNameScopeFromObject(i)) + yield return i; } } @@ -163,11 +164,13 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml { if (collectionElement as XamlObject != null) { - yield return collectionElement as XamlObject; + if (!onlyFromSameNamescope || NameScopeHelper.GetNameScopeFromObject(item) == NameScopeHelper.GetNameScopeFromObject(collectionElement as XamlObject)) + yield return collectionElement as XamlObject; - foreach (var i in GetAllChildDesignItems(collectionElement as XamlObject)) + foreach (var i in GetAllChildXamlObjects(collectionElement as XamlObject)) { - yield return i; + if (!onlyFromSameNamescope || NameScopeHelper.GetNameScopeFromObject(item) == NameScopeHelper.GetNameScopeFromObject(i)) + yield return i; } } }