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)