2011-03-10 3 views

답변

0

해결책을 찾았습니다. 어쩌면 간단한 방법이있다, 그렇다면 알려 주시기 바랍니다

private void OnHasRtbReachedEnd(System.Windows.Controls.RichTextBox rtb) 
    { 
     TextPointer pointer1 = rtb.CaretPosition; 
     int iCurrentLine = GetLineNumber(rtb); 
     rtb.CaretPosition = rtb.Document.ContentEnd; 
     int iLastLine = GetLineNumber(rtb); 

     if (iCurrentLine == iLastLine) 
     { 
      if (!_bIsRtbMovingUpDown) 
       MoveToNextDataGridRow(); 
      _bIsRtbMovingUpDown= false; 
     } 
     else 
     { 
      _bIsRtbMovingUpDown= true; 
     } 
     rtb.CaretPosition = pointer1; 
    } 

//이 코드는 http://social.msdn.microsoft.com/Forums/en/wpf/thread/667b5d2a-84c3-4bc0-a6c0-33f9933db07f // 에서

private int GetLineNumber(System.Windows.Controls.RichTextBox rtb) 
    { 
     TextPointer caretLineStart = rtb.CaretPosition.GetLineStartPosition(0); 
     TextPointer p = rtb.Document.ContentStart.GetLineStartPosition(0); 
     int caretLineNumber = 1; 

     while (true) 
     { 
      if (caretLineStart.CompareTo(p) < 0) 
      { 
       break; 
      } 

      int result; 
      p = p.GetLineStartPosition(1, out result); 

      if (result == 0) 
      { 
       break; 
      } 

      caretLineNumber++; 
     } 
     return caretLineNumber; 

    } 
1

은 MSDN 링크

http://social.msdn.microsoft.com/Forums/en/wpf/thread/667b5d2a-84c3-4bc0-a6c0-33f9933db07f

을 확인하시기 바랍니다 온다

정말로 캐럿의 줄 번호를 알고 싶다면 다음과 같은 것을 할 수 있습니다 (아마도 몇 가지 필요합니다.) 왕) :

TextPointer caretLineStart = rtb.CaretPosition.GetLineStartPosition(0); 
TextPointer p = rtb.Document.ContentStart.GetLineStartPosition(0); 
int caretLineNumber = 1; 

while (true) 
{ 
    if (caretLineStart.CompareTo(p) < 0) 
    { 
     break; 
    } 

    int result; 
    p = p.GetLineStartPosition(1, out result); 

    if (result == 0) 
    { 
     break; 
    } 

    caretLineNumber++; 
} 
+0

안녕 키 쇼어입니다 감사합니다! 내가 찾은 해결책을 게시하고있었습니다! :) – okidoki

+0

해당 링크에서 솔루션을 얻었습니다 –

+0

상황 (빈 줄)에 대해 caretLineStart.CompareTo (p) <0을 caretLineStart.CompareTo (p) <= 0으로 변경하십시오. –

1

코드는 라인의 수를 얻을 :

Int32 CountDisplayedLines(RichTextBox rtb) 
{ 
    Int32 result = -1; 

    rtb.CaretPosition = rtb.Document.ContentStart; 

    while (rtb.CaretPosition.GetLineStartPosition(++result) != null) 
    { 
    } 

    return result; 
} 
+0

위대한, 그것은 작동합니다. –

0

나는 코드를 시도하고 항상 정확한 결과를 제공하지 않습니다. 그것을 할 수 한 현명한 방법이

int previousCursorPosition; 
    private void RichTarget_KeyDown_1(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Up || e.Key == Key.Down) 
     { 
      Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender; 
      previousCursorPosition = rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart); 
     } 
    } 
    private void RichTextBox_KeyUp_1(object sender, KeyEventArgs e) 
    { 

      if (e.Key == Key.Up) 
      { 
       Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender; 

       if (previousCursorPosition == rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart)) 
       { 
        //do your staff 

       } 

      } 
      else if (e.Key == Key.Down) 
      { 
       Xceed.Wpf.Toolkit.RichTextBox rich = (Xceed.Wpf.Toolkit.RichTextBox)sender; 
       if (previousCursorPosition == rich.CaretPosition.GetOffsetToPosition(rich.CaretPosition.DocumentStart)) 
       { 
        //do your staff 
       } 
      } 


    } 
관련 문제