2016-09-07 5 views
0

AvalonEdit TextEditor을 특정 줄로 스크롤하는 데 많은 문제가 있습니다. ScrollTo() 동작은보기의 중간에 해당 줄이 나타날 때까지 단순히 스크롤하는 것입니다. 나는 많은 다른 방법을 인터넷에서 발견 했으므로 오프셋을 얻는 것과 같다.AvalonEdit 줄로 스크롤

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

그러나 각각은 고유 한 문제가있다. 예를 들어, 위의 행에서 나는 TextView.VisualLines으로 예외를 얻고있었습니다.

답변

3

필자의 텍스트가 모두 균일 한 높이 였기 때문에 오프셋을 얻기 위해 줄 높이 * 줄 #을 사용할 수있었습니다. 나는 처음에 라인 높이를 계산하기 위해 (Editor.TextArea.TextView.DocumentHeight/Editor.Document.LineCount)을 사용하여이 작업을 시도했지만 약간의 부동 소수점 문제로 인해 약간 꺼져 보였고 문서에서 더 멀리 떨어지면 점점 더 멀어졌습니다. 내 문서가 균일 한 높이이기 때문에 그러나, 다시, 나는 내가 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