2010-05-25 89 views
0

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

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

是否有某种方式使此操作以某种方式发生,实际上它是可撤销/可重做的?

回答

2

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

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