Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AvaloneEdit滚动至第行_C#_Scroll_Avalonedit - Fatal编程技术网

C# AvaloneEdit滚动至第行

C# AvaloneEdit滚动至第行,c#,scroll,avalonedit,C#,Scroll,Avalonedit,让AvaloneEditTextEditor滚动到特定行时,我遇到了很多麻烦。 ScRoToTo()/Case>行为只需滚动,直到该行位于视图的中间。我尝试了许多不同的方法,在互联网上找到的,所以喜欢用 double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line); 但每一个都有自己的问题。例如,在上面的一行中,我得到了TextView.VisualLines的异常,我最终发现,由于我的文本都是

让AvaloneEdit
TextEditor
滚动到特定行时,我遇到了很多麻烦。<代码> ScRoToTo()/Case>行为只需滚动,直到该行位于视图的中间。我尝试了许多不同的方法,在互联网上找到的,所以喜欢用

double visualTop = textEditor.TextArea.TextView.GetVisualTopByDocumentLine(line);

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

的异常,我最终发现,由于我的文本都是统一高度的,所以我可以通过行高*行来获得偏移量。我第一次尝试使用
(Editor.TextArea.TextView.DocumentHeight/Editor.Document.LineCount)
来计算行高,但这似乎有点偏离,可能是由于一些浮点问题,并且在文档中越走越远,偏离越大。但是,由于我的文档高度一致,我意识到我可以使用
TextView.DefaultLineHeight
属性,并提出:

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

这会一直滚动到文档中正确的位置。

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


editor.TextArea.Caret.Offset对我有效,但我必须从行号中减去1。此外,我认为将插入符号偏移量设置为滚动到的行是更好的用户体验。这当然取决于您的应用程序,但我喜欢插入符号的想法。不过,在我的例子中,我有两个编辑器,我想在某种程度上进行同步(有点像在文本文件中创建带有数据的浮动标题),因此我自动滚动的窗口是只读的,不需要插入符号。我需要在不移动插入符号的情况下执行此操作。我还发现,像这样的方法有时在屏幕顶部没有我想要的线条,而只是“在视图”的某个地方。
editor.TextArea.Caret.Offset <- offset
editor.TextArea.Caret.BringCaretToView()