gpt4 book ai didi

avalonedit - 突出显示 avalonedit 中出现的所有单词

转载 作者:行者123 更新时间:2023-12-04 04:45:31 24 4
gpt4 key购买 nike

我想在双击鼠标时突出显示所选单词的所有出现。这个问题Highlight all occurrences of selected word in AvalonEdit确实回答了如何使用 Document Colorizer 进行操作,但我不确定如何将单词传入。此外,我如何通过鼠标双击触发重新着色?

最佳答案

如果您只想通过更改背景颜色来突出显示单词,有一个简单的解决方案:使用 IBackgroundRenderer
要存储应该突出显示的文档部分,您可以使用 TextSegmentCollection<T> .本集合店TextSegment实例,然后您可以在 IBackgroundRenderer.Draw 中使用这些实例方法实现。
Layer属性应返回 IBackgroundRenderer 所在的图层呈现。这可以简单地是 KnownLayer.Selection在选区后面渲染。
Draw方法可以实现如下:

if (!textView.VisualLinesValid)
return;

var visualLines = textView.VisualLines;
if (visualLines.Count == 0)
return;

int viewStart = visualLines.First().FirstDocumentLine.Offset;
int viewEnd = visualLines.Last().LastDocumentLine.EndOffset;

foreach (TextSegment result in currentResults.FindOverlappingSegments(viewStart, viewEnd - viewStart))
BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder();
geoBuilder.AlignToMiddleOfPixels = true;
geoBuilder.CornerRadius = 3;
geoBuilder.AddSegment(textView, result);
Geometry geometry = geoBuilder.CreateGeometry();
if (geometry != null) {
drawingContext.DrawGeometry(markerBrush, markerPen, geometry);
}
}

简短说明:首先您必须检查 VisualLines 是否存在是有效的,如果有的话。如果没有,则无事可做,因此我们退出。

然后,您可以使用第一个可见文档行的起始偏移量和最后一个可见文档行的结束偏移量来计算可见范围。这应该会加快渲染过程,因为我们只处理当前可见的内容。
FindOverlappingSegments返回与给定范围重叠的所有段的列表。

然后我们使用 BackgroundGeometryBuilder ,一个辅助类,用于为高光创建漂亮的几何图形。这也用于 AvalonEdit 中当前选定的文本。

将其添加到 TextEditor使用: textEditor.TextArea.TextView.BackgroundRenderers.Add(renderer);
如果将结果公开为属性,则可以使用: renderer.Results.Add(result);
要刷新屏幕,您可以使用 textEditor.TextArea.TextView.InvalidateLayer(KnownLayer.Selection);如果它不是自动完成的。

关于avalonedit - 突出显示 avalonedit 中出现的所有单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247012/

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