我想将插入符号 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
属性(property)在 RichTextBox
.我选择忽略 is 并滚动我自己的选项卡功能,因为使用 AcceptsTab
进行切换在后续行中缩进文本有一个令人讨厌的副作用,即 不是 我想要的是。
最佳答案
我刚刚遇到了同样的问题。似乎最终插入符号的位置取决于它在插入之前的移动方式。
以下代码确保(3.5sp1)插入后,光标将位于插入文本的右侧:
rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
rtb.CaretPosition.InsertTextInRun(text);
请注意,插入符号的 LogicalDirection 属性可能(并且必须)由此更改;仅仅创建正确的 TextPointer 是不够的。
关于wpf - 如何在 WPF RichTextBox 中将插入符号移动一定数量的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497291/