示例应用程序说明
这个示范WPF绘制应用程序用来作为结合Undo/Redo操作的案例。该WPF应用程序示例支持四种操作:插入对象、删除对象、移动对象和调整对象的尺寸,它还有两种类型的几何对象:矩形和多边形。它使用画布作为包含这些几何对象的容器。
现在,在此系列文章中,我们可以看到如何让这四个操作支持Undo/Redo。在第一部分,使用单个对象表示变化的方法实现。在第二部分,使用命令模式实现而在第三部分,使用备忘录模式实现。
使用单个对象表示变化的方法实现示范应用程序的Undo/Redo
利用单个对象表示变化的方法对示范应用程序Undo/Redo的实现将在以下步骤中讨论
步骤1
我们将识别出那些需要支持Undo/Redo的操作。这里有四个操作支持Undo/Redo。它们是::插入对象、删除对象、移动对象和调整对象的尺寸。我们将对矩形和椭圆支持Undo/Redo,这里的容器是画布。
步骤2
现在我们将识别出那些进一步处理Undo/Redo所需的保存的参数。几何对象移动时其边距改变,因此要支持对象移动的Undo/Redo,要保存边距。当对象改变尺寸时,它的高度、宽度和边距改变。因此为支持对象尺寸调整的Undo/Redo,我们需要保存高度、宽度和边距。为了支持插入和删除的Undo/Redo操作,我们需要保存几何对象的引用。
步骤3
现在我们得到包含边距、高度、宽度、动作类型、几何对象引用的ChangeRepresentationObject以支持所有操作的Undo/Redo。这里的几何对象引用被保存以便我们在对其进行Undo/Redo时获取。同样使动作类型enum代表插入、删除、移动和调整尺寸操作。此动作类型enum被用作ChangeRepresentationObject的一部分。
public enum ActionType
{
Delete = 0,
Move = 1,
Resize = 2,
Insert = 3
}
Collapse Copy Code
public class ChangeRepresentationObject
{
public ActionType Action;
public Point Margin;
public double Width;
public double height;
public FrameworkElement UiElement;
}
这里,已附上使用单个对象表示变化的方法实现Undo/Redo的项目。