diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeCompletionTests.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeCompletionTests.cs
index 21462d9962..3b5f4ab08f 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeCompletionTests.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeCompletionTests.cs
@@ -646,6 +646,27 @@ namespace ICSharpCode.XamlBinding.Tests
Assert.Contains("ColumnSpan", items);
});
}
+
+ [Test]
+ public void CtrlSpaceTest27()
+ {
+ string fileHeader = @"
+";
+
+ TestCtrlSpace(fileHeader, fileFooter, true,
+ list => {
+ Assert.AreEqual(0, list.PreselectionLength);
+ Assert.IsNull(list.SuggestedItem);
+ Assert.IsTrue(list.Items.Any());
+ var items = list.Items.Select(item => item.Text).ToArray();
+ Assert.Contains("x:Class", items);
+ Assert.Contains("x:Subclass", items);
+ Assert.Contains("x:ClassModifier", items);
+ Assert.False(items.Contains("x:FieldModifier"));
+ });
+ }
#endregion
#region KeyPress
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
index 6e3f725d47..0465d515e0 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
@@ -51,6 +51,10 @@ namespace ICSharpCode.XamlBinding
"Class", "ClassModifier", "Subclass"
}.AsReadOnly();
+ public static readonly ReadOnlyCollection ChildOnlyElements = new List {
+ "FieldModifier"
+ }.AsReadOnly();
+
static readonly List emptyList = new List();
///
@@ -94,6 +98,7 @@ namespace ICSharpCode.XamlBinding
bool inAttributeValue = false;
AttributeValue value = null;
bool isRoot = false;
+ bool wasAXmlElement = false;
int offsetFromValueStart = -1;
List ancestors = new List();
@@ -120,6 +125,11 @@ namespace ICSharpCode.XamlBinding
if (string.IsNullOrEmpty(xamlNamespacePrefix) && attr.Value == XamlNamespace)
xamlNamespacePrefix = attr.LocalName;
}
+
+ if (!wasAXmlElement && item.Parent is AXmlDocument)
+ isRoot = true;
+
+ wasAXmlElement = true;
}
item = item.Parent;
@@ -263,7 +273,6 @@ namespace ICSharpCode.XamlBinding
} else {
if (rt == null) {
list.Add(new XamlCompletionItem(xamlPrefix, XamlNamespace, "Uid"));
- return list;
} else {
AddAttributes(rt, list, includeEvents);
list.AddRange(GetListOfAttached(context, string.Empty, string.Empty, includeEvents, true));
@@ -296,7 +305,7 @@ namespace ICSharpCode.XamlBinding
static bool AllowedInElement(bool inRoot, string item)
{
- return inRoot || !RootOnlyElements.Contains(item);
+ return inRoot ? !ChildOnlyElements.Contains(item) : !RootOnlyElements.Contains(item);
}
public static IEnumerable CreateListForXmlnsCompletion(IProjectContent projectContent)