是否有一种方法可以在WPF窗口中为每个包含的控件(而不仅仅是焦点控件)执行撤消和重做过程

时间:2019-06-19 16:57:47

标签: c# wpf

我的WPF应用程序中有一个报表部分,其中包含一些不同的WPF页面。我需要我的报告页面可以由用户编辑。每个报告页面包含不同的Textbox和RichTextBox控件。

每当更改某个控件的值时,如果我在键盘上按ctrl + z和ctrl + y,则仅当控件处于聚焦状态时,才会执行撤消和重做操作。

是否有任何方法可以扩展这些组合键的功能,以在页面上所有现有控件上执行撤消和重做过程而无需关注它们?

2 个答案:

答案 0 :(得分:0)

如果您将效果锁定在command pattern下,则可以自己处理撤消/重做事件。只要所涉及的wpf控件绑定到已完成/撤消/重做的数据即可。这样就可以了。

请参阅Undo/Redo Implementation For Multiple Variables

答案 1 :(得分:0)

您可以使用蛮力方法。

假设您正在使用MVVM(如果不使用MVVM,则应该学习并使用它)。

在视图模型中进行适当更改的句柄,并通过将整个视图模型序列化为视图模型的集合在前后保持不变。每个状态一个。然后,您可以在该集合中向后进行迭代,以返回并重新应用。

这相对容易实现,但缺点是重做之间可能丢失更改。

您可以通过增加一些复杂性来改进它。保留属性名称,每个属性更改的旧值和新值。