wpf - 如何在 WPF RichTextBox 中将插入符号移动一定数量的位置?

标签 wpf richtextbox

我想将插入符号 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/

相关文章:

VB.NET:语法突出显示

javascript - 目前富文本文本区域编辑器的王者是什么?

WPF:允许用户调整 RichTextBox 中图像的大小

WPF RichTextBox 的有条件滚动?

wpf - 如何处理低级错误并将其传达给 wpf gui?

c# - WPF - 当我从其他窗口添加项目时,Observablecollection 绑定(bind)的 DataGrid 没有更新

c# - 将项目添加到 ListCollectionView 时抛出异常

C# 和 SQLGeometry : Combining Database Rows and WPF

c# - 在 WPF 应用程序中存储颜色

c# - 将 XAML 导入 WPF RichTextBox