我在让AvalonEdit TextEditor滚动到特定行时遇到了很多问题。ScrollTo()的行为只是滚动,直到该行位于视图的中间。我已经尝试了在互联网上找到的许多不同的方法,所以喜欢用以下方式获得偏移量
double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);但每一个都有自己的问题。例如,在上面的代码行中,我得到了TextView.VisualLines的异常。
发布于 2016-09-08 05:29:53
我最终发现,由于我的文本都是统一高度的,所以我可以只做line height * line#来获得偏移量。我最初尝试使用(Editor.TextArea.TextView.DocumentHeight / Editor.Document.LineCount)来计算行高,但可能是由于一些浮点问题,这似乎有一点偏差,并且随着您在文档中越往下走,这一点就越不准确。但是,同样由于我的文档是统一高度的,我意识到可以使用TextView.DefaultLineHeight属性,并提出:
double vertOffset = (Editor.TextArea.TextView.DefaultLineHeight) * Line;
Editor.ScrollToVerticalOffset(vertOffset);这将非常一致地滚动到文档中的正确位置。
发布于 2016-09-23 08:54:14
另一种方法是设置插入符号位置,然后调用BringCaretToView()。在F#中:
editor.TextArea.Caret.Offset <- offset
editor.TextArea.Caret.BringCaretToView()这会将包含'offset‘的行滚动到视图中,但不会在编辑器中滚动文本,因此此行现在是第一个可见的行。因此,您采用哪种方法可能取决于您是否希望目标行位于顶部。
https://stackoverflow.com/questions/39379290
复制相似问题