我想把插入符号4个位置移动到我的插入符号所在的位置.我已注册PreviewKeyDown,并InsertTextInRun()在捕获tab键时调用,如下所示:
private void rtb_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Tab)
    {
        rtb.CaretPosition.InsertTextInRun("    ");
        e.Handled = true;
    }
}
问题是在拨打电话后,插入符号保持不变InsertTextInRun().它并没有移动到新的文字,这是我想要的行为结束.我该怎么做?
暂且不说 - 是的,我知道AcceptsTab房产RichTextBox.我选择忽略is并滚动我自己的标签功能,因为tabbing具有AcceptsTab在后续行上缩进文本的令人讨厌的副作用,这不是我想要的.
我刚刚碰到了同样的问题.似乎最终的插入位置取决于它在插入之前移动的方式.
下面的代码确保(3.5sp1)插入后,光标将位于插入文本的右侧:
 rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
rtb.CaretPosition.InsertTextInRun(text);
请注意,插入符号的LogicalDirection属性可能(并且必须)由此更改; 仅仅创建正确的TextPointer是不够的.