2016-10-10 57 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

相关问题