2010-05-25 87 views
0

作爲編輯器項目的一部分,我需要向WPF RichTextBox控件添加功能以允許用戶在表上執行操作。其中一項操作是將新的寬度值應用於表格的一列或多列。我有一個函數將新的Width值應用到正在討論的TableColumn對象中,並且該表正在很好地調整其自身。但是,我注意到列寬度更改操作似乎沒有添加到撤消堆棧。撤消/重做支持WPF RichTextBox中的表更改

換句話說,如果用戶鍵入某個內容,然後更改列寬,然後選擇撤消,則RichTextBox控件將撤銷用戶的輸入。撤消和重做似乎沒有在TableColumn對象上獲取屬性更改。

是否有某種方式使此操作以某種方式發生,實際上它是可撤銷/可重做的?

回答

2

不幸的是,似乎FlowDocument TableColumn對象被認爲是佈局指導而不是真正的強制對象。因此,這些對象的更改不會通過構建到WPF RichTextBox控件中的更改跟蹤系統進行跟蹤。有關更多詳細信息,請參見here

我通過將涉及TableColumn對象的表更改爲可由跟蹤系統跟蹤的原子操作來解決此問題。基本上,如果我想執行涉及操縱TableColumn對象的操作,我開始了一個分組撤消操作,從FlowDocument中刪除封閉的表,根據需要操作它,將其添加回到FlowDocument,然後關閉撤消批處理。這樣,更改跟蹤系統就會記錄現有內容的替代,undo/redo可以正確處理。