非常棒的问题 👍 —— 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)使用 FoldingManagerBraceFoldingStrategy
括号匹配高亮内置支持,可通过样式自定义
语法错误标记可在 TextChanged 时扫描并添加 TextMarker
代码提示 / 智能感知可集成 ICSharpCode.Decompiler 或 Roslyn 分析器实现

📘 七、完整功能演示(总结版)

✅ 功能清单:

  • ✅ 语法高亮(C#)
  • ✅ 行号显示
  • ✅ 搜索(Ctrl+F)
  • ✅ 替换(按钮替换)
  • ✅ 自动滚动
  • ✅ 自定义字体 / 字号

⚡ 八、扩展方向(如果你要做编辑器)

如果你想开发一个轻量级代码编辑器或 IDE,可在 AvalonEdit 基础上继续集成:

  • 🔹 FoldingManager(代码折叠)
  • 🔹 TextMarkerService(错误下划线)
  • 🔹 CompletionWindow(代码自动完成)
  • 🔹 LineTransformer(高亮特定行)
  • 🔹 Roslyn 分析器(语法检查、语义补全)