zak*_*ach 1 c# scroll avalonedit
我在AvalonEdit TextEditor滚动到特定行时遇到了很多麻烦.该ScrollTo()行为是简单地滚动,直到该行是在取景当中.我尝试过在互联网上发现的许多不同的方法,所以就像获得偏移一样
double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);
Run Code Online (Sandbox Code Playgroud)
但每个人都有自己的问题.例如,在上面的行中我得到了例外TextView.VisualLines.
另一种方法是设置插入符号位置,然后调用BringCaretToView()。在 F# 中:
editor.TextArea.Caret.Offset <- offset
editor.TextArea.Caret.BringCaretToView()
Run Code Online (Sandbox Code Playgroud)
这会将包含 'offset' 的行滚动到视图中,但不会滚动编辑器中的文本,因此该行现在是第一个可见的行。因此,您采用哪种方法可能取决于您是否希望目标线位于顶部。
我最终搞清楚,因为我的文字都是均匀的高度,我可以做行高*行#来获得偏移量.我首先尝试使用这个(Editor.TextArea.TextView.DocumentHeight / Editor.Document.LineCount)来计算行高,但这似乎略微偏离,可能是由于一些浮点问题,并且越来越远离你在文档中走得更远.但是,再次,因为我的文件是统一的高度,我意识到我可以使用该TextView.DefaultLineHeight属性并提出:
double vertOffset = (Editor.TextArea.TextView.DefaultLineHeight) * Line;
Editor.ScrollToVerticalOffset(vertOffset);
Run Code Online (Sandbox Code Playgroud)
这非常一致地滚动到文档中正确的位置.