2017-06-17 50 views
2

我正在開發一個UWP應用程序,我正在使用一個RichEditBox控件,而且我在撤銷功能方面遇到了一些問題。在RichEditBox中的當前撤銷組中包含文本更改?

我知道我可以使用BeginUndoGroup方法從由RichEditBox暴露ITextDocument對象創建在編輯我的文字,我可以使用一個撤消組,因此用戶將撤消所有這些變化一起(當我打電話EndUndoGroup太)。

對我來說,問題是我的應用程序中有一些自動完成功能,我不知道如何製作,以便我爲自動完成添加的字符/更改包含在上一個撤消組中。

例如,假設你輸入「H」字,我發現從TextChanged事件(或從RichEditBox和我添加「ELLO」的文字,所以你最終用「你好」的另一事件,然後用綠色將整個單詞着色

如果我使用BeginUndoGroup方法,我可以同時撤消添加的「ello」和綠色,但用戶仍然會以'h'字符結束

或者,例如,如果我用隨機顏色爲每個新字符着色,我不知道如何製作它,以便撤消功能將撤消我的顏色更改以及用戶輸入的前一個字符。

有什麼辦法來解決這個問題(即包括當前/以前的撤銷組中的某些變化),還是我只需要拿出一些骯髒的黑客就像調用Undo方法兩次當用戶希望撤銷更改,希望他不會注意到文本閃爍?

感謝您的幫助!

+0

要製作一個像word這樣的輸入框太難了。 – lindexi

回答

0

貌似沒有一個內置的解決方案,所以我固定的問題(更多的是解決辦法的真,但到目前爲止,它的正常工作)從KeyDown事件處理程序調用BeginUndoGroup,並在TextChanged調用EndUndoGroup處理程序。

我還在應用語法高亮之前和之後禁用/啓用TextChanged處理程序,或者在應用文本格式時執行該處理程序。

而且,現在看來,這並不重要調用完美對Begin/EndUndoGroup,如稱他們中的任何一個在錯誤的情況下(例如,呼叫EndUndoGroup當沒有新開團,或BeginUndoGroup兩次連續)完全沒有做任何事情,所以這是一件讓人擔心的事情。