2010-03-23 40 views
8

我想将插入符号4的位置移到我的脱字符当前位置的右侧。我注册了PreviewKeyDown,并调用InsertTextInRun()当TAB键被捕获,像这样:如何将插入符号移动到WPF RichTextBox中的某个位置?

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 

的问题是,插入符号调用InsertTextInRun()后留在地方。它不会不是移动到新文本的末尾,这是我想要的行为。我将如何做到这一点?


顺便说一句 - 是的,我知道在RichTextBoxAcceptsTab财产。我选择忽略并且滚动我自己的选项卡功能,因为与AcceptsTab挂钩具有在后续行上缩进文本的令人讨厌的副作用,即而不是我想要的。

回答

8

我刚碰到同样的问题。看起来最后的插入位置取决于它在插入之前正在移动的方式。

下面的代码可以确保(3.5SP1),其插入后,光标将插入文本的权利:

rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward); 
rtb.CaretPosition.InsertTextInRun(text); 

注意插入符号的LogicalDirection属性可能(并且已经到)被这个改变;仅仅创建正确的TextPointer是不够的。

1

在CaretPosition TextPointer上使用GetInsertionPosition()方法。这将允许您在脱字符前插入文本。

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.GetInsertionPosition(LogicalDirection.Backward).InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 
+0

哇,我一定错过了!我会尽快给你一个尝试,谢谢! :) – 2010-03-23 13:40:21

+1

对不起,没有骰子。脱字符未移动到插入文本的末尾。 – 2010-03-24 01:42:28

+0

对我来说也没有工作,只有解决方案是可行的解决方案。 – ToastyMallows 2013-06-26 22:27:14

1

为了测试,你可以尝试自己强迫运动:

rtb.CaretPosition = rtb.Document.ContentEnd; 

如果这样的作品,你可能必须执行额外的逻辑情况下的标签是不是在内容的末尾。

相关问题