AvalonEdit 滚动到行

AvalonEdit scroll to line

我很难让 AvalonEdit TextEditor 滚动到特定行。 ScrollTo() 行为只是滚动直到该行位于视图中间。我尝试了在互联网上找到的许多不同方法,所以喜欢用

获取偏移量
double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);

但每个人都有自己的问题。例如,在上面的行中,我遇到了 TextView.VisualLines.

的异常

我最终发现,因为我的文字都是统一高度,所以我可以只做行高 * 行# 来获得偏移量。我首先尝试使用 (Editor.TextArea.TextView.DocumentHeight / Editor.Document.LineCount) 来计算行高,但似乎有点偏离,可能是由于某些浮点问题,并且随着您在文档中向下移动的距离越来越远。但是,由于我的文档是统一高度,我意识到我可以使用 TextView.DefaultLineHeight 属性 并想出了:

double vertOffset = (Editor.TextArea.TextView.DefaultLineHeight) * Line;
Editor.ScrollToVerticalOffset(vertOffset);

这非常一致地滚动到文档中的正确位置。

另一种方法是设置插入符位置,然后调用 BringCaretToView()。在 F# 中:

editor.TextArea.Caret.Offset <- offset
editor.TextArea.Caret.BringCaretToView()

这会将包含 'offset' 的行滚动到视图中,但不会滚动编辑器中的文本,因此该行现在是第一个可见的行。所以你采取哪种方法可能取决于你是否希望目标行在顶部。