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;
}
}
}