2016-10-10 92 views
0

我有一個RichTextBox自定義格式的文本在其中的特殊位。然而,在插入字符之後存在一個錯誤,插入符被放置在新插入的字符之前而不是之後。如何在RichTextBox中以編程方式移動插入位置?

這是因爲對於每一個編輯,代碼重新計算應用自定義格式的內容,然後設置,像這樣的CaretPosition ...

protected override void OnTextChanged(TextChangedEventArgs e) 
    { 
     base.OnTextChanged(e); 

     currentPos = CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward); 

     // Apply special formatting on the content 
     Content = GetContentValue(); 

     if (currentPos != null) 
      CaretPosition = currentPos; 

    } 

我不知道如何在代碼中移動插入符號等等它出現在插入的字符之後,例如,如果原始內容是「11」,並且在文本中間插入「2」,我希望插入符號位於「2」之後。

它當前顯示爲「1x21」(其中x是插入符號)。任何幫助將不勝感激

回答

1

TextPointer對象 指示的位置和LogicalDirection是不可變的。當編輯或修改內容時,由TextPointer指示的位置 相對於周圍的 文本不會改變;而是從內容 開始的該位置的偏移量被相應地調整以反映 內容中的新相對位置。例如,指示在給定段落的起始 處的位置的TextPointer繼續指向 該段落的開始,即使在段落之前插入或刪除內容或 之後。 MSDN

下面的代碼插入上Button.Click文本。

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     /* text to insert */    
     string text = "some text"; 

     /* get start pointer */ 
     TextPointer startPtr = Rtb.Document.ContentStart; 

     /* get current caret position */ 
     int start = startPtr.GetOffsetToPosition(Rtb.CaretPosition); 

     /* insert text */ 
     Rtb.CaretPosition.InsertTextInRun(text); 

     /* update caret position */ 
     Rtb.CaretPosition = startPtr.GetPositionAtOffset((start) + text.Length); 

     /* update focus */ 
     Rtb.Focus(); 
    } 
+0

謝謝,這解釋了很多!我將繼續使用新內容的偏移量來移動插入位置 – Tiggy

相關問題