diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs index cd6d8404c3..eee53c0446 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs @@ -397,7 +397,9 @@ namespace ICSharpCode.XamlBinding if (context.Description == XamlContextDescription.InMarkupExtension && context.AttributeValue != null && !context.AttributeValue.IsString) { if (!XamlBindingOptions.UseExtensionCompletion) return false; - XamlCompletionItemList completionList = generator.CreateMarkupExtensionCompletion(context) as XamlCompletionItemList; + var completionList = generator.CreateMarkupExtensionCompletion(context) as XamlCompletionItemList; + if (completionList == null) + return false; string word = context.Editor.GetWordBeforeCaretExtended(); if (context.PressedKey != '.' && context.PressedKey != '=' && !word.EndsWith(".", StringComparison.Ordinal) && completionList.PreselectionLength == 0) completionList.PreselectionLength = word.Length; diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs index f6ca4485ce..28c85ecb11 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs @@ -41,9 +41,13 @@ namespace ICSharpCode.XamlBinding if (key == ':' || key == '/') return CompletionItemListKeyResult.NormalKey; - if (key == '.' && (context.InAttributeValueOrMarkupExtension && context.Attribute.Name.StartsWith("xmlns"))) + if (key == '.' && (context.InAttributeValueOrMarkupExtension && context.Attribute.Name.StartsWith("xmlns", StringComparison.Ordinal))) return CompletionItemListKeyResult.NormalKey; + // cancel completion if user might want to start a markup extension and value is still empty + if (key == '{' && (context.InAttributeValueOrMarkupExtension && string.IsNullOrEmpty(context.RawAttributeValue))) + return CompletionItemListKeyResult.Cancel; + return base.ProcessInput(key); }