如何在 ICSharpCode.AvalonEdit.TextEditor 中更改文本颜色?

use*_*071 3 c# wpf icsharpcode avalonedit

再会!

我正在尝试制作简单的代码编辑器,因此我希望能够选择文本行并将其颜色更改为红色,使用ICSharpCode.AvalonEdit.TextEditor.

但我不知道如何使用它。你能帮我改变文本行的颜色吗?

谢谢你!

nXu*_*nXu 5

要选择一行,请使用 Select() 方法:

var line = editor.Document.GetLineByOffset(lineOffset);
editor.Select(line.Offset, line.Length);
Run Code Online (Sandbox Code Playgroud)

以编程方式更改行的颜色是很棘手的,因为 AvalonEdit 是一个代码编辑器,而不是富文本编辑器,颜色主要用于语法突出显示。根据SharpDevelop 论坛的这篇文章,您应该创建一个 DocumentColorizingTransformer。他们的示例应该适合您(为了更好的可读性,我删除了所有错误检查代码):

class LineColorizer : DocumentColorizingTransformer
{
    int lineNumber;

    public LineColorizer(int lineNumber)
    {
        this.lineNumber = lineNumber;
    }

    protected override void ColorizeLine(ICSharpCode.AvalonEdit.Document.DocumentLine line)
    {
        if (!line.IsDeleted && line.LineNumber == lineNumber) {
            ChangeLinePart(line.Offset, line.EndOffset, ApplyChanges);
        }
    }

    void ApplyChanges(VisualLineElement element)
    {
        // This is where you do anything with the line
        element.TextRunProperties.SetForegroundBrush(Brushes.Red);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,要将其应用到您的文档中,您可以按如下方式使用它:

editor.TextArea.TextView.LineTransformers.Add(new LineColorizer(lineOffset));
Run Code Online (Sandbox Code Playgroud)