5

我想实现一些在提供文档行时以编程方式更改文本背景的东西。(看起来非常类似于文本的块选择的东西。我将使用它来调试我正在使用的 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 在我查看该行时发生变化,它不会突出显示更新的行,直到我滚动到文档的另一部分(隐藏更新的行),然后回来到更新的行。

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

4

3 回答 3

3

由于这是他们的创作,我偷看了 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;
    }
于 2012-08-16T12:23:41.353 回答
2

我找到了答案

TxtEditCodeViewer.TextArea.TextView.Redraw();
于 2012-08-21T01:28:18.773 回答
0

这不是这个问题的重复吗?

但是,您似乎应该调用InvalidateArrange()编辑器或InvalidateVisual()每个更改的视觉对象。

于 2012-08-18T23:56:12.197 回答