<avalonEdit:TextEditor> 有没有可能使用自己定义的高亮规则,可以的话大概怎么做

使用问题 · 590 次浏览
ILiJ 创建于 2024-08-22 23:16

自己定义高亮规则习惯了,算是重度发烧友了, 在自定义窗口里面有没有可能实现呢?

ILiJ 最后更新于 2024/8/22

回复内容
CL 2024-08-23 07:36
#1

参考控件的官方文档  http://avalonedit.net/documentation/html/4d4ceb51-154d-43f0-b876-ad9640c5d2d8.htm 

搜索关键词:avalonedit custom highlight

ILiJ 2024-08-23 15:14
#2

刚上手时候困在获取控件和动作变量上, 最后还是解决了. WPF了解不深,但下面是成功的代码:


数据映射:

 HLxshd:{HLxshd}


辅助代码:

using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Collections.Generic;
using Quicker.Public;
using System.IO;
using System.Xml;
using System.Windows.Input;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
using ICSharpCode.AvalonEdit;

public static void OnWindowCreated(Window win, IDictionary<string, object> dataContext, ICustomWindowContext winContext)
{
    var textEditor = (TextEditor)win.FindName("textEditor");

    textEditor.Text = "A·Z\n" +
                      "Hello, AvalonEdit!\n" +
                      "if else.\n";

    // 加载高亮规则
    string xshdContent = dataContext["HLxshd"].ToString(); // 从动作变量中读取xshd
    IHighlightingDefinition iHL = LoadCustomHighlightingFromString(xshdContent);
    textEditor.SyntaxHighlighting = iHL;
}

// 加载规则的函数
public static IHighlightingDefinition LoadCustomHighlightingFromString(string xshd)
{
    using (var stringReader = new StringReader(xshd))
    {
        using (var xmlReader = new XmlTextReader(stringReader))
        {
            return HighlightingLoader.Load(xmlReader, HighlightingManager.Instance);
        }
    }
}


效果:


ILiJ 最后更新于 7天15小时前
回复主贴