diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs index 1ba0a8c8c7..dba82d72d5 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs @@ -45,7 +45,9 @@ namespace ICSharpCode.AvalonEdit.AddIn } set { var itemAdapters = this.CompletionList.CompletionData.Cast(); - this.CompletionList.SelectedItem = itemAdapters.FirstOrDefault(a => a.Item == value); + var item = itemAdapters.FirstOrDefault(a => a.Item == value); + this.CompletionList.SelectedItem = item; + this.CompletionList.ScrollIntoView(item); } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj index acae917905..63962ed145 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj @@ -46,8 +46,8 @@ False True obj\ - - + True + True false @@ -55,7 +55,7 @@ True False obj\ - + True diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs index bf4e38bc32..1a953d2b6d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs @@ -192,6 +192,10 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion /// /// Gets/Sets the selected item. /// + /// + /// The setter of this property does not scroll to the selected item. + /// You might want to also call . + /// public ICompletionData SelectedItem { get { return (listBox != null ? listBox.SelectedItem : null) as ICompletionData; @@ -199,11 +203,22 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion set { if (listBox == null && value != null) ApplyTemplate(); - listBox.SelectedItem = value; - listBox.ScrollIntoView(value); + if (listBox != null) // may still be null if ApplyTemplate fails, or if listBox and value both are null + listBox.SelectedItem = value; } } + /// + /// Scrolls the specified item into view. + /// + public void ScrollIntoView(ICompletionData item) + { + if (listBox == null) + ApplyTemplate(); + if (listBox != null) + listBox.ScrollIntoView(item); + } + /// /// Occurs when the SelectedItem property changes. /// @@ -370,7 +385,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion if (itemText.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) >= 0) return 2; } - + if (!camelCaseMatch.HasValue) camelCaseMatch = CamelCaseMatch(itemText, query); if (camelCaseMatch == true) diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs index 6867f87c24..4eec5242b7 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs @@ -266,7 +266,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting )); } if(color.Underline ?? false) - element.TextRunProperties.SetTextDecorations(TextDecorations.Underline); + element.TextRunProperties.SetTextDecorations(TextDecorations.Underline); } /// diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj index df226bd6bd..47582f623d 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj @@ -49,8 +49,8 @@ True obj\ Full - - + True + True bin\Release\ @@ -59,7 +59,7 @@ True False Full - + True diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs index 516c0a4623..dc4f7318b5 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs @@ -596,7 +596,27 @@ namespace ICSharpCode.AvalonEdit.Rendering set { SetValue(LinkTextBackgroundBrushProperty, value); } } #endregion - + + /// + /// LinkTextUnderlinedBrush dependency property. + /// + public static readonly DependencyProperty LinkTextUnderlineProperty = + DependencyProperty.Register("LinkTextUnderline", typeof(bool), typeof(TextView), + new FrameworkPropertyMetadata(true)); + + /// + /// Gets/sets whether to underline link texts. + /// + /// + /// Note that when setting this property to false, link text remains clickable and the LinkTextForegroundBrush (if any) is still applied. + /// Set TextEditorOptions.EnableHyperlinks and EnableEmailHyperlinks to false to disable links completely. + /// + public bool LinkTextUnderline + { + get { return (bool)GetValue(LinkTextUnderlineProperty); } + set { SetValue(LinkTextUnderlineProperty, value); } + } + #region Redraw methods / VisualLine invalidation /// /// Causes the text editor to regenerate all visual lines. @@ -1989,7 +2009,8 @@ namespace ICSharpCode.AvalonEdit.Rendering } else if (e.Property == Control.ForegroundProperty || e.Property == TextView.NonPrintableCharacterBrushProperty || e.Property == TextView.LinkTextBackgroundBrushProperty - || e.Property == TextView.LinkTextForegroundBrushProperty) + || e.Property == TextView.LinkTextForegroundBrushProperty + || e.Property == TextView.LinkTextUnderlineProperty) { // changing brushes requires recreating the cached elements RecreateCachedElements(); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs index f492bce777..bf895ce9a6 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs @@ -64,7 +64,8 @@ namespace ICSharpCode.AvalonEdit.Rendering { this.TextRunProperties.SetForegroundBrush(context.TextView.LinkTextForegroundBrush); this.TextRunProperties.SetBackgroundBrush(context.TextView.LinkTextBackgroundBrush); - this.TextRunProperties.SetTextDecorations(TextDecorations.Underline); + if (context.TextView.LinkTextUnderline) + this.TextRunProperties.SetTextDecorations(TextDecorations.Underline); return base.CreateTextRun(startVisualColumn, context); }