我为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的文本有关,导致选择丢失?但同样,它不会一直发生,我不知道如何解决它。 有什么想法吗?
答案 0 :(得分:1)
我最终得到了2个选项,忽略了这个错误或实现了
MoveLeftByWord
逻辑manully没有触及
CaretPosition