2017-04-27 4 views
1

AvalonEdit을 텍스트 뷰어로 만들고 싶습니다.텍스트 뷰어로 AvalonEdit - 캐리지 없음

textEditor.IsReadOnly = true; 

및 제어는 변경할 수 없습니다,하지만 여전히 편집기처럼 행동 - 캐럿을 표시하고 탐색 키 (화살표, 페이지 업/다운)를 사용하여 :

나는 할 수있다 뷰를 스크롤하는 대신 캐럿을 이동합니다.

뷰어로 만들 방법이 있습니까? 적어도 캐럿을 숨기려면 요?

답변

3

AvalonEdit이 세 가지 구성 요소로 구성되어 있습니다 :

  • TextEditor을, 에 TextArea을 래핑하고 높은 수준의 TextBox- 유사 API를 추가합니다.
  • 를 받아 그래서 모든 편집 기능을 사용하지 않도록 실제 코드 표시

에게 있습니다

  • TextView을 처리 캐럿, 선택 및 입력, 추가210
  • TextArea는, 당신은 직접 TextView 클래스를 사용할 수 있습니다. 스크롤을 사용하려면, 당신은 ScrollViewer에 자신을 포장해야합니다 (중요 : 문서의 보이지 않는 부분 렌더링 피하기 위해 CanContentScroll 가능) 직접 TextView 구성 요소를 사용하여

    <ScrollViewer 
         Focusable="False" 
         CanContentScroll="True" 
         VerticalContentAlignment="Top" 
         HorizontalContentAlignment="Left"> 
        <avalonedit:TextView Name="textView" /> 
    </ScrollViewer> 
    

    을, 당신은 몇 가지를 수행해야합니다 일반적으로 TextEditor 자신에 의해 수행 된 작업의 : 당신이 (예를 들어 텍스트를 선택 주위의 편집 기능의 일부를 유지하려는 경우

    textView.Document = new TextDocument(); // create document instance 
    textView.LineTransformers.Insert(0, 
        new HighlightingColorizer(HighlightingManager.Instance.GetDefinition("C#"))); 
    

    TextView이 충분하지 않고 클립 보드에 복사). 그런 경우 TextEditor 또는 TextArea을 계속 사용하고 원하지 않는 기능을 사용 중지해야합니다.선택 로직 caret가 필요에 따라 같은

    당신은 정말 캐럿을 해제 할 수는 없지만 숨길 수 :

    textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent; 
    

    문서를 만들기 읽기 전용 텍스트 입력 및 다양한 편집 명령을 해제합니다 :

    textEditor.IsReadOnly = true; 
    

    는 또한 텍스트 영역의 입력 처리기에서 명령을 제거 할 수 있습니다

    // remove the keyboard caret navigation and selection logic, 
    // but keep the mouse selection logic and editing commands 
    textEditor.TextArea.DefaultInputHandler.NestedInputHandlers.Remove(
        textEditor.TextArea.DefaultInputHandler.CaretNavigation); 
    
  • +0

    그렇다면 줄 번호를 추가하는 올바른 방법은 무엇입니까? 'TextView'는이 속성을 가지고 있지 않습니다. 'avalonedit : LineNumberMargin'을 추가하려고 시도했지만 텍스트 뷰에 연결하는 방법을 모르겠습니다. 'TextView' 속성을 설정하면 물건들이 멈추게됩니다. – Arek

    +0

    TextEditor 접근 방식을 테스트 한 후 실제 뷰어 에서처럼 CaretNavigation 스크롤링 작업을 제거한 후. 이것은 완벽하고 아마도이 접근법을 사용하게 될 것입니다. – Arek

    1

    falseIsHitTestVisible 속성을 설정하려고 :

    textEditor.IsHitTestVisible = false; 
    

    그것은 캐럿을 숨기 않지만, 일이 많은, 더 이상 즉 작동하지 않습니다. 마우스 휠

    로 스크롤 당신은 단지 당신이 CaretBrush 재산 Transparent에 설정할 수 있습니다 캐럿 숨기려면 :

    textEditor.TextArea.Caret.CaretBrush = Brushes.Transparent; 
    
    +0

    그것은 캐럿을 숨기지 만, 많은 것은 더 이상 작동하지 않습니다. 마우스 휠로 스크롤. – Arek

    +0

    내 편집을 참조하십시오. 상세한 답변을 주셔서 감사합니다. – mm8