AvalonEdit滚动到行

时间:2016-09-07 21:29:53

标签: c# scroll avalonedit

我在使用AvalonEdit TextEditor滚动到特定行时遇到了很多麻烦。 ScrollTo()行为只是滚动,直到该行位于视图的中间。我在互联网上尝试了很多不同的方法,比如用

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

但每个人都有自己的问题。例如,在上面一行中,我使用TextView.VisualLines获得了例外。

2 个答案:

答案 0 :(得分:5)

我最终搞清楚,因为我的文字都是均匀的高度,我可以做行高*行#来获得偏移量。我首先尝试使用(Editor.TextArea.TextView.DocumentHeight / Editor.Document.LineCount)来计算行高,但这似乎略有偏差,可能是由于一些浮点问题,并且越来越远离你在文档中走得更远。但是,由于我的文档高度统一,我意识到我可以使用TextView.DefaultLineHeight属性并提出:

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

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

答案 1 :(得分:3)

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

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

这将滚动包含&#39; offset&#39;的行。进入视图,但它不会在编辑器中滚动文本,使得此行现在是第一个可见的行。那么你采取哪种方法可能取决于你是否希望目标线位于顶部。