我在使用AvalonEdit TextEditor
滚动到特定行时遇到了很多麻烦。 ScrollTo()
行为只是滚动,直到该行位于视图的中间。我在互联网上尝试了很多不同的方法,比如用
double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);
但每个人都有自己的问题。例如,在上面一行中,我使用TextView.VisualLines
获得了例外。
答案 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;的行。进入视图,但它不会在编辑器中滚动文本,使得此行现在是第一个可见的行。那么你采取哪种方法可能取决于你是否希望目标线位于顶部。