RichTextBoxに「ChangeCase」キーボードショートカット(MSWORDのShift+ F3など)を実装しました。これは、マウスで選択したテキスト、またはキャレットの位置の前の最後の単語を変更します。問題は、時々選択を失ったり、キャレットを1単語左に移動したりすることです。このキャレット位置の変更なしでテキストケースを変更すると、キャレット位置(おそらく一部のWPFの内部キャッシュ)が変更されることはないため、この関数をテキストの一部に対して初めて実行したときにのみ発生する可能性があります。
使用されるコードは、ここでWPFFlowdocumentの「ケースの変更」機能で説明されているソリューションです。
コードの問題のあるセクションの1つは確かに
end = this.CaretPosition;
EditingCommands.MoveLeftByWord.Execute(null, this);
start = this.CaretPosition;
this.CaretPosition = end;
しかし、なぜそれがたまにしか起こらないのか、そしてこれを修正する方法がわかりません。私のWPFアプリではたまにしか発生しないため、このExecute()メソッドの実行速度といくつかの副作用に関係していると思いますが、このWPFコントロールをWinformsでホストする場合、カーソルを1語左に移動するとすべて発生します。時間(Shift + F3を押したままにすると、カーソルが単語ごとにドキュメントの先頭に移動します)
他の問題は、TextRangeのテキストの変更に関連している可能性があり、その結果、選択が失われますか?しかし、繰り返しになりますが、それは常に発生するわけではなく、修正する方法がわかりません。何か案は?