I use AvalonEdit:TextEditor
. Can i enable quick search dialog (on Ctrl-F for example) for this control? Or maybe someone has code for search words into AvalonEdit:TextEditor
text?
6 Answers
There isn't much documentation about it, but AvalonEdit does have a built in SearchPanel class that sounds exactly like what you want. There is even a SearchInputHandler class that makes it trivial to get it hooked up to your editor, responding to keyboard shortcuts, etc. Here is some sample code that attached the standard search logic to an editor:
myEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(myEditor.TextArea));
Here is a screenshot of what it will look like (this is taken from ILSpy which uses AvalonEdit). You can see the search control in the top right, the search options it supports, and the automatic highlighting it does of matching results.
There isn't any support for replace...but if you just need searching, this can be a great solution.

- 2,938
- 2
- 24
- 53
-
And for XAML? It is not possible? – Alexsandro Apr 04 '16 at 21:12
-
There are a lot of things that I wish were easy to use in XAML when it comes to AvalonEdit. I usually end up inheriting from `TextEditor` to extend it. In one of my projects, I think I even called it `BindableTextEditor` because all I added were hooks to make it easy to bind. I'm not a XAML expert so perhaps there is a better way to do this (behaviors?) but that's the direction I'd go in if you want to control this through XAML. – Stephen McDaniel Apr 05 '16 at 22:29
For Avalon Edit Version 5.0.1.0 and up, just do this:
SearchPanel.Install(XTBAvalonEditor);
Where XTBAvalonEditor is the WPF AvalonEdit control name.
Make sure to add this using statement:
using ICSharpCode.AvalonEdit.Search;
Then when the editor has focus, press CTL-F: You'll see the find control pop up in upper right hand corner.

- 6,672
- 3
- 50
- 74
-
Is there anything to do besides that? After having "installed" it this way, it shows up when I click on CTRL-F, but I cannot type in it. – Gimly Jan 23 '18 at 16:11
-
This worked perfectly for me, even with version: 6.3.0.90 of AvalonEdit, thank you. :-) – holbizmetrics Jul 14 '23 at 15:17
In the TextEditor constructor in the ICSharpCode.AvalonEdit project, add SearchPanel.Install(this.TextArea); and voila, using ctrl+f opens the search window.
(using the line from Stephen McDaniel's post (replace myEditor with this) also works, but the support for SearchInputHandler is being removed)
(works well with AvalonEdit inside AvalonDock with MVVM)
From:
public TextEditor() : this(new TextArea())
{
}
To:
public TextEditor() : this(new TextArea())
{
SearchPanel.Install(this.TextArea);
}

- 131
- 1
- 4
-
Better make own derived class: using ICSharpCode.AvalonEdit; using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Search; namespace SVitLAB.WinTail.Views.Controls { public class TextEditorSearchable : TextEditor { public TextEditorSearchable() : base(new TextArea()) { SearchPanel.Install(TextArea); } } } – scribe May 19 '22 at 09:16
The last time I checked it was a "No". You will have to implement your own search/replace functionality.
http://community.icsharpcode.net/forums/p/11536/31542.aspx#31542
You can quickly add find/replace from here - http://www.codeproject.com/Articles/173509/A-Universal-WPF-Find-Replace-Dialog

- 697
- 7
- 13
ICSharpCode.AvalonEdit 4.3.1.9429
Search and highlight item.
private int lastUsedIndex = 0;
public void Find(string searchQuery)
{
if (string.IsNullOrEmpty(searchQuery))
{
lastUsedIndex = 0;
return;
}
string editorText = this.textEditor.Text;
if (string.IsNullOrEmpty(editorText))
{
lastUsedIndex = 0;
return;
}
if (lastUsedIndex >= searchQuery.Count())
{
lastUsedIndex = 0;
}
int nIndex = editorText.IndexOf(searchQuery, lastUsedIndex);
if (nIndex != -1)
{
var area = this.textEditor.TextArea;
this.textEditor.Select(nIndex, searchQuery.Length);
lastUsedIndex=nIndex+searchQuery.Length;
}
else
{
lastUsedIndex=0;
}
}
Replace operation:
public void Replace(string s, string replacement, bool selectedonly)
{
int nIndex = -1;
if(selectedonly)
{
nIndex = textEditor.Text.IndexOf(s, this.textEditor.SelectionStart, this.textEditor.SelectionLength);
}
else
{
nIndex = textEditor.Text.IndexOf(s);
}
if (nIndex != -1)
{
this.textEditor.Document.Replace(nIndex, s.Length, replacement);
this.textEditor.Select(nIndex, replacement.Length);
}
else
{
lastSearchIndex = 0;
MessageBox.Show(Locale.ReplaceEndReached);
}
}

- 4,261
- 7
- 75
- 124
In my case, I couldn't find the Search.Install(...)
method so I used the below code to add the search functionality.
textEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(textEditor.TextArea));
The search box can be activated by pressing Ctrl + F
on your keyboard.

- 921
- 8
- 21