在WPF RichTextBox中撤消/重做对表更改的支持

时间:2010-05-25 19:00:31

标签: wpf richtextbox

作为编辑器项目的一部分,我需要向WPF RichTextBox控件添加功能,以允许用户对表执行操作。其中一个操作是将新的宽度值应用于表的一列或多列。我有一个函数将一个新的Width值应用于相关的TableColumn对象,并且该表正在很好地调整自身大小。但是,我注意到列宽更改操作似乎没有添加到撤消堆栈。

换句话说,如果用户键入内容,然后更改列宽,然后选择撤消,则RichTextBox控件将撤消用户的输入。撤消和重做似乎没有在TableColumn对象上获取属性更改。

有没有办法让这个操作以实际可撤销/可重做的方式发生?

1 个答案:

答案 0 :(得分:1)

不幸的是,似乎FlowDocument TableColumn对象被认为是布局指南而不是真正的强制对象。因此,更改跟踪系统构建到WPF RichTextBox控件中不会跟踪对这些对象的更改。有关详细信息,请参阅here

我通过将涉及TableColumn对象的表更改转换为将由更改跟踪系统跟踪的原子操作来解决该问题。基本上,如果我想执行涉及操作TableColumn对象的操作,我开始进行分组撤消操作,从FlowDocument中删除封闭表,根据需要对其进行操作,将其添加回FlowDocument,然后关闭撤消批处理。这样,更改跟踪系统会记录现有内容的替换,undo / redo可以正确处理。