非常棒的问题 👍 —— AvalonEdit 是 WPF 中最强大的文本编辑控件之一(尤其适合代码编辑器开发)。
下面我来详细讲解 如何在 WPF 中使用 AvalonEdit 实现代码高亮、搜索与替换功能,附完整示例代码,可直接运行。
🧩 一、AvalonEdit 简介
AvalonEdit 是一个开源的 WPF 文本编辑控件(源自 SharpDevelop IDE)。
它提供:
- 语法高亮(Highlighting)
- 括号匹配
- 行号显示
- 自动缩进
- 搜索 / 替换
- 自定义语法规则
📦 NuGet 安装:
Install-Package AvalonEdit
🧱 二、基本使用:在 WPF 中添加 AvalonEdit 控件
XAML 示例:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit"
Title="AvalonEdit 示例" Height="600" Width="800">
<Grid>
<DockPanel>
<!-- 顶部工具栏 -->
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="5">
<TextBox x:Name="SearchBox" Width="150" Margin="0,0,5,0" PlaceholderText="搜索内容..." />
<Button Content="查找" Click="Find_Click" Margin="0,0,5,0"/>
<TextBox x:Name="ReplaceBox" Width="150" Margin="0,0,5,0" PlaceholderText="替换为..." />
<Button Content="替换" Click="Replace_Click" />
</StackPanel>
<!-- AvalonEdit 编辑器 -->
<avalonedit:TextEditor x:Name="CodeEditor"
ShowLineNumbers="True"
FontFamily="Consolas"
FontSize="14"
SyntaxHighlighting="C#"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Margin="5" />
</DockPanel>
</Grid>
</Window>
⚙️ 三、后台代码逻辑(C#)
MainWindow.xaml.cs:
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Search;
using System.IO;
using System.Windows;
namespace WpfApp1
{
public partial class MainWindow : Window
{
private SearchPanel searchPanel;
public MainWindow()
{
InitializeComponent();
// 初始化语法高亮(可自动根据文件类型设置)
CodeEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
// 添加搜索面板
searchPanel = SearchPanel.Install(CodeEditor.TextArea);
// 示例:加载一个默认内容
CodeEditor.Text = @"using System;
class HelloWorld {
static void Main() {
Console.WriteLine(""Hello AvalonEdit!"");
}
}";
}
private void Find_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(SearchBox.Text))
{
searchPanel.SearchPattern = SearchBox.Text;
searchPanel.IsClosed = false;
searchPanel.Reactivate(); // 显示内置搜索面板
}
}
private void Replace_Click(object sender, RoutedEventArgs e)
{
string searchText = SearchBox.Text;
string replaceText = ReplaceBox.Text;
if (!string.IsNullOrEmpty(searchText))
{
CodeEditor.Text = CodeEditor.Text.Replace(searchText, replaceText);
}
}
}
}
✨ 四、语法高亮(Syntax Highlighting)
AvalonEdit 内置多种语法高亮方案(支持 XML、HTML、C#、Java、Python 等)。
设置方式非常简单:
CodeEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
// 或手动加载 .xshd 文件(自定义语法规则)
using (var stream = File.OpenRead("CustomHighlighting.xshd"))
{
using (var reader = new XmlTextReader(stream))
{
CodeEditor.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
}
🟢 可选内置高亮语言:
XML, HTML, C#, Java, JavaScript, PHP, SQL, VB, XAML
🔍 五、搜索与替换功能实现方式
AvalonEdit 提供了官方的 SearchPanel
模块,非常方便。
✅ 搜索(Search)
只需安装搜索面板:
SearchPanel.Install(CodeEditor.TextArea);
它会自动添加一个可弹出的搜索窗口(支持快捷键 Ctrl+F)。
✅ 替换(Replace)
有两种方式:
1️⃣ 简单文本替换(整篇):
CodeEditor.Text = CodeEditor.Text.Replace(oldText, newText);
2️⃣ 精准替换(带正则 / 大小写匹配):
AvalonEdit 的 SearchPanel
也支持正则与选项设置,可通过:
searchPanel.UseRegex = true;
searchPanel.MatchCase = false;
🧠 六、进阶功能(可选增强)
功能 | 实现方式 |
---|---|
行号显示 | ShowLineNumbers="True" |
自动换行 | WordWrap="True" |
代码折叠(Folding) | 使用 FoldingManager 和 BraceFoldingStrategy |
括号匹配高亮 | 内置支持,可通过样式自定义 |
语法错误标记 | 可在 TextChanged 时扫描并添加 TextMarker |
代码提示 / 智能感知 | 可集成 ICSharpCode.Decompiler 或 Roslyn 分析器实现 |
📘 七、完整功能演示(总结版)
✅ 功能清单:
- ✅ 语法高亮(C#)
- ✅ 行号显示
- ✅ 搜索(Ctrl+F)
- ✅ 替换(按钮替换)
- ✅ 自动滚动
- ✅ 自定义字体 / 字号
⚡ 八、扩展方向(如果你要做编辑器)
如果你想开发一个轻量级代码编辑器或 IDE,可在 AvalonEdit 基础上继续集成:
- 🔹 FoldingManager(代码折叠)
- 🔹 TextMarkerService(错误下划线)
- 🔹 CompletionWindow(代码自动完成)
- 🔹 LineTransformer(高亮特定行)
- 🔹 Roslyn 分析器(语法检查、语义补全)
发表回复