0

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

使用的代码是此处WPF Flowdocument "change case" feature中提到的解决方案。

一段有问题的代码肯定是

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

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

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

4

1 回答 1

1

我最终有 2 个选项,忽略此错误或实施

MoveLeftByWord

逻辑manully而不触及

CaretPosition
于 2012-07-16T16:50:52.200 回答