gpt4 book ai didi

c# - Avalonedit 如何以编程方式更改文本背景

转载 作者:太空狗 更新时间:2023-10-30 01:07:35 25 4
gpt4 key购买 nike

我想实现一些在提供文档行时以编程方式更改文本背景的东西。(看起来非常类似于文本的 block 选择的东西。我将使用它来调试 IDE 的断点我在设计)。我不想使用选择,因为它会导致文本框滚动。

我想我需要使用 DocumentColorizingTransformer,但我不是 100% 确定如何去做。

public class ColorizeAvalonEdit : ICSharpCode.AvalonEdit.Rendering.DocumentColorizingTransformer
{
protected override void ColorizeLine(ICSharpCode.AvalonEdit.Document.DocumentLine line)
{
int lineStartOffset = line.Offset;
string text = CurrentContext.Document.GetText(line);
int start = 0;
int index;
if (line.LineNumber == LogicSimViewCodeWPFCtrl.currentLine)
{
while ((index = text.IndexOf(text, start)) >= 0)
{
base.ChangeLinePart(
lineStartOffset + index, // startOffset
lineStartOffset + index + text.Length, // endOffset
(VisualLineElement element) =>
{
element.TextRunProperties.SetBackgroundBrush(Brushes.Red);

});
start = index + 1; // search for next occurrence
}
}
}
}

currentLine 是将突出显示的部分。

上面的代码确实工作正常.. 唯一的问题是,如果在我查看该行时 currentLine 发生变化,它不会突出显示更新的行,直到我滚动到文档的另一部分(隐藏更新的行),回到更新的行。

另外,如何让行号从零开始?

最佳答案

因为这是他们的创作,我偷看了 SharpDevelop 的源代码以及他们是如何做到的。

他们定义了一个书签类型(BreakpointBookmark)并在行中添加了书签。书签本身在 CreateMarker 方法中设置线条的颜色。奇怪的是,在 SharpDevelop 中无法配置断点的颜色。

希望对您有所帮助。

    protected override ITextMarker CreateMarker(ITextMarkerService markerService)
{
IDocumentLine line = this.Document.GetLine(this.LineNumber);
ITextMarker marker = markerService.Create(line.Offset, line.Length);
marker.BackgroundColor = Color.FromRgb(180, 38, 38);
marker.ForegroundColor = Colors.White;
return marker;
}

关于c# - Avalonedit 如何以编程方式更改文本背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com