富文本框在更改底层的流文档文本时会丢失选择/插入符号位置

本文关键字:文本 选择 插入 位置 符号 文档 | 更新日期: 2023-09-27 18:33:05

我已经为RichTextBox实现了"ChangeCase"键盘快捷键(如MS WORD中的Shift+F3(,它可以更改鼠标选择的文本或插入符号位置之前的最后一个单词。问题是,它有时会丢失选择,或者将插入符号向左移动一个单词。一旦它更改了文本大小写而不更改插入符号位置,那么它永远不会更改插入符号位置(可能是某些 WPF 的内部缓存(,因此它只会在我第一次对部分文本运行此函数时发生。

使用的代码是此处提到的 WPF 流文档"更改大小写"功能中提到的解决方案。

代码的一个有问题的部分肯定是

end = this.CaretPosition;
EditingCommands.MoveLeftByWord.Execute(null, this);
start = this.CaretPosition;
this.CaretPosition = end;

但是我不知道为什么它只是偶尔发生以及如何解决这个问题。我认为这与这个 Execute(( 方法的执行速度和一些副作用有关,因为在我的 WPF 应用程序中它只会偶尔发生,但是在 Winforms 中托管此 WPF 控件时,将插入符号向左移动一个单词一直发生(如果我按住 Shift+F3,光标会逐字移动到文档的最开头(

其他问题可能与更改文本范围的文本有关,这会导致丢失选择?但同样,它不会一直发生,我不知道如何解决它。有什么想法吗?

富文本框在更改底层的流文档文本时会丢失选择/插入符号位置

我最终得到了 2 个选项,忽略此错误或实现

MoveLeftByWord

逻辑不触及

CaretPosition