Skip to content

Commit 209e040

Browse files
authored
Merge pull request #363 from GID0317/Gallery-Fix-CodePresenterBlinkingCarret
Gallery-Fix: Fix Blinking Carret Showing on Code Presenter
2 parents 583427a + 7838bc4 commit 209e040

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

source/iNKORE.UI.WPF.Modern.Gallery/Controls/SampleCodePresenter.xaml.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ColorCodeStandard;
1+
using ColorCodeStandard;
22
using ICSharpCode.AvalonEdit;
33
using ICSharpCode.AvalonEdit.Editing;
44
using ICSharpCode.AvalonEdit.Highlighting;
@@ -72,6 +72,29 @@ public SampleCodePresenter()
7272
CodePresenter.TextArea.SelectionBorder = new Pen(Brushes.Transparent, 0);
7373
CodePresenter.TextArea.SelectionCornerRadius = 0;
7474
CodePresenter.TextArea.SetResourceReference(TextArea.SelectionBrushProperty, ThemeKeys.TextControlSelectionHighlightColorKey);
75+
76+
// Ensure caret never shows (keep selection & copy)
77+
HideCaretPermanently();
78+
CodePresenter.TextArea.GotFocus += (s,e)=> HideCaretPermanently();
79+
CodePresenter.TextArea.TextView.VisualLinesChanged += (s,e)=> HideCaretPermanently();
80+
}
81+
82+
private void HideCaretPermanently()
83+
{
84+
// Make sure the editor can still be clicked for selection but caret invisible.
85+
var caret = CodePresenter.TextArea.Caret;
86+
caret.CaretBrush = Brushes.Transparent;
87+
// keep focus off the editor so IME/caret logic does not repaint a visible caret
88+
if (CodePresenter.IsFocused)
89+
{
90+
// Move focus to parent container (still allows mouse selection highlight within AvalonEdit)
91+
var parent = (DependencyObject)CodePresenter.Parent;
92+
while (parent != null && parent is not Control)
93+
{
94+
parent = LogicalTreeHelper.GetParent(parent);
95+
}
96+
(parent as Control)?.Focusable.Equals(true);
97+
}
7598
}
7699

77100
private static void OnSubstitutionsPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs args)

0 commit comments

Comments
 (0)