2012-05-02 2 views
0

RichTextBoxの "ChangeCase"キーボードショートカット(MS WORDのShift + F3など)を実装しました。ポジション。問題は、何者かが選択を失うか、キャレットを1語だけ左に移動することです。 このキャレット位置を変更せずにテキストケースを変更すると、キャレットの位置が変更されることはありません(WPFの内部キャッシングのように)。この機能はテキストの一部に初めて実行されるときにのみ発生します。RichTextBoxが元のFlowDocumentのテキストを変更するときに選択/キャレットの位置が失われる

ここで使用されるコードは、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を押したままにすると、カーソルが1単語ずつ単語の先頭に移動する)

他の問題は、選択範囲を失う結果になっているTextRangeのテキストを変更することに関連している可能性がありますか?しかし、再び、それはいつも起こるわけではなく、私はそれを修正する手がかりがありません。 アイデア

答えて

1

私は、2つのオプションになってしまったこのエラーを無視したり

CaretPosition 
を触れることなくmanully

MoveLeftByWord 

ロジックを実装します

関連する問題