2016-09-07 6 views
0

У меня возникли проблемы с получением AvalonEdit TextEditor, чтобы перейти к определенной строке. Поведение ScrollTo() - это просто прокрутка, пока эта линия не окажется в середине представления. Я пробовал много различных методов поиска по всему Интернету и SO как получить смещение сAvalonEdit прокрутите до строки

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

Но каждый из них имеет свои собственные проблемы. Например, в приведенной выше строке я получал исключения с TextView.VisualLines.

ответ

3

Я закончил тем, что выяснил, что, поскольку мой текст был одинаковой высоты, я мог бы просто сделать линию * линию #, чтобы получить смещение. Сначала я попытался сделать это, используя , чтобы рассчитать высоту линии, но это, казалось, было немного отпущено, вероятно, из-за некоторых проблем с плавающей запятой, и все больше не учитывалось, чем дальше вы вошли в документ. Но, опять же, так как мой документ равномерная высота, я понял, что я мог бы использовать TextView.DefaultLineHeight собственность и придумал:

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

Это очень последовательно свитки точно в нужном месте в документе.

+0

Это работает для меня, но я должен вычесть 1 из номера строки. Кроме того, я думаю, что лучше использовать пользовательский интерфейс, чтобы установить смещение каретки в линию, к которой вы прокрутили. –

+0

Это определенно зависит от вашего приложения, но мне нравится идея каретки. В моем случае, однако, у меня было два редактора, которые я хотел немного синхронизировать (вроде как создавать плавающие заголовки с данными в текстовом файле), поэтому окно, которое я выполнял автопрокрутку, было только для чтения и не требовалось. – zaknotzach

1

Другой способ сделать это - установить положение каретки, а затем вызвать BringCaretToView(). В F #:

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

Это будет прокручивать строку, содержащую «смещение» в поле зрения, но это не будет прокручивать текст в редакторе, например, что эта линия является теперь первым видимым один. Таким образом, какой подход вы можете принять, зависит от того, хотите ли вы, чтобы целевая линия была наверху или нет.

+0

Мне нужно было сделать это, не двигая Карет. Также я обнаружил, что методы вроде этого иногда не имели линии, которую я хотел в верхней части экрана, а просто «смотрели» где-то. – zaknotzach

 Смежные вопросы

  • Нет связанных вопросов^_^