[英]RichTextBox losing selection/caret position when changing underlying's FlowDocument's text
我已經為RichTextBox實現了“ ChangeCase”鍵盤快捷方式(例如MS WORD中的Shift + F3),該快捷方式可以更改鼠標選擇的文本或插入符號位置前的最后一個單詞。 問題是,它有時會丟失選擇,或將插入符號左移一個字。 一旦在不改變插入符位置的情況下更改了文本大小寫,就永遠不會改變插入符的位置(可能是某些WPF的內部緩存。),因此只能在我第一次對部分文本運行此功能時發生。
使用的代碼是WPF Flowdocument“更改案例”功能中提到的解決方案。
代碼的一個有問題的部分肯定是
end = this.CaretPosition;
EditingCommands.MoveLeftByWord.Execute(null, this);
start = this.CaretPosition;
this.CaretPosition = end;
但是我不知道為什么它僅在某些時候出現以及如何解決。 我覺得這與Execute()方法的執行速度和一些副作用有關,因為在我的WPF應用程序中,它有時僅會發生,但是在Winforms中托管此WPF控件時,將插入符號向左移動一個字會時間(如果按住Shift + F3,則光標將單詞逐字移動到文檔的開頭)
其他問題可能與更改TextRange的文本有關,這會導致選擇丟失? 但是同樣,它並不會一直發生,我也不知道如何解決它。 有任何想法嗎?
我最終有2個選擇,忽略了此錯誤或實現了
MoveLeftByWord
邏輯上不碰
CaretPosition
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.