支援四操作:插入/刪除/移動/調整大小,兩種幾何圖形:矩形/多邊形,容器:Canvas。
Margin;調整大小 → 保存 Width, Height, Margin;插入/刪除 → 保存 UIElement 參考。ActionType enum:Delete=0, Move=1, Resize=2, Insert=3。ChangeRepresentationObject 含 Action, Margin, Width, Height, UIElement。
public enum ActionType { Delete = 0, Move = 1, Resize = 2, Insert = 3 }
public class ChangeRepresentationObject {
public ActionType Action;
public Point Margin;
public double Width;
public double Height;
public FrameworkElement UIElement;
}
public partial class UndoRedo : IUndoRedo {
private Stack _UndoActionsCollection = new Stack();
private Stack _RedoActionsCollection = new Stack();
public void Undo(int level) {
for (int i = 1; i <= level; i++) {
if (_UndoActionsCollection.Count == 0) return;
ChangeRepresentationObject obj = _UndoActionsCollection.Pop();
// 依 ActionType 執行邏輯,並將反向資訊推入 RedoStack
// ... 完整程式碼見原文 ...
}
}
public void Redo(int level) {
for (int i = 1; i <= level; i++) {
if (_RedoActionsCollection.Count == 0) return;
ChangeRepresentationObject obj = _RedoActionsCollection.Pop();
// 依 ActionType 執行邏輯,並將反向資訊推入 UndoStack
// ... 完整程式碼見原文 ...
}
}
public void InsertObjectforUndoRedo(ChangeRepresentationObject dataobject) {
_UndoActionsCollection.Push(dataobject);
_RedoActionsCollection.Clear();
}
// ... 輔助方法 PushInUnDoForDelete/Insert/Resize/Move 等 ...
}
專案原始碼附件含完整實作。下一部分將展示命令模式與備忘錄模式實作同一應用。