【问题标题】:AvalonEdit scroll to lineAvalonEdit 滚动到行
【发布时间】:2016-09-07 21:29:52
【问题描述】:

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

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

但每个人都有自己的问题。例如,在上述行中,TextView.VisualLines 出现异常。

【问题讨论】:

    标签: c# scroll avalonedit


    【解决方案1】:

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

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

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

    【讨论】:

    • 我需要在不移动插入符号的情况下执行此操作。我还发现,像这样的方法有时在屏幕顶部没有我想要的线条,而只是在某个地方“在视图中”。
    【解决方案2】:

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

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

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

    【讨论】:

    • 这对我有用,但我必须从行号中减去 1。另外,我认为将插入符号偏移设置为您滚动到的行会更好的用户体验。
    • 这绝对取决于您的应用程序,但我喜欢插入符号的想法。不过在我的情况下,我有两个编辑器我想要同步(有点用文本文件中的数据创建浮动标题),所以我自动滚动的窗口是只读的,不需要插入符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多