protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); CommandBindings.Add(new CommandBinding(ApplicationCommands.Undo, (sender, ce) => { var undo = UndoStack.Pop(); _isUndoHandle = true; if (!(UndoCommand?.CanExecute(null) ?? true)) { return; } else { UndoCommand?.Execute(null); } undo.UndoAction(undo); }, (sender, ce) => { ce.CanExecute = UndoStack.Any(); })); CommandBindings.Add(new CommandBinding(ApplicationCommands.Redo, (sender, ce) => { var redo = RedoStack.Pop(); _isUndoHandle = false; if (!(RedoCommand?.CanExecute(null) ?? true)) { return; } else { RedoCommand?.Execute(null); } redo.RedoAction(redo); }, (sender, ce) => { ce.CanExecute = RedoStack.Any(); })); }
/// <summary> /// 元に戻す /// </summary> /// <returns>破壊的命令をUndoしたか</returns> public bool Undo() { if (!UndoStack.Any()) { return(false); } var cmd = UndoStack.Pop(); cmd.Undo(); RedoStack.Push(cmd); if (cmd.IsDestructive) { EditCount--; } return(cmd.IsDestructive); }
public override void Undo() { if (!UndoStack.Any()) { return; } // Get Previous Change var previousItemChange = UndoStack.Pop(); var selectedItem = Items[previousItemChange.Index]; // Set Redo Change PushNewItemChange(selectedItem, previousItemChange.Index, RedoStack); // Undo Items[previousItemChange.Index] = (Furniture)previousItemChange.Item; var img = EditorPictureBox.Image; EditorPictureBox.Image = ImageGeneration.DrawFurnitureArrows((Bitmap)Inventory.GetItemPic(ItemCellSize, ItemsPerRow, Items, MainForm.SaveFile.SaveType, EditorPictureBox.Size), (Furniture[])Items, ItemsPerRow); img?.Dispose(); OnItemChanged(selectedItem, Items[previousItemChange.Index], previousItemChange.Index); }
private bool CanExecuteUndoCommand(object parameter) { return(UndoStack.Any()); }