技术开发 频道

C#中使用命令模式实现Undo/Redo

  调整尺寸方法改变了几何对象的边距、高度、宽度,因此调整尺寸命令带有边距的变化、高度的变化、宽度的变化以及几何对象的引用。在调整尺寸的命令中,Execute方法通过增加边距变化,高度变化和宽度变化改变几何对象UIelement,而Unexecute方法通过减去刚应用的变化来撤销操作。这样,它减掉了几何对象UIelement的边距变化、高度变化和宽度变化。

class InsertCommand : ICommand
    {
        
private FrameworkElement _UiElement;
        
private Canvas _Container;

        
public InsertCommand(FrameworkElement uiElement, Canvas container)
        {
            _UiElement
= uiElement;
            _Container
= container;
        }

        
#region ICommand Members

        
public void Execute()
        {
            
if (!_Container.Children.Contains(_UiElement))
            {
                _Container.Children.Add(_UiElement);
            }
        }

        
public void UnExecute()
        {
            _Container.Children.Remove(_UiElement);
        }

        
#endregion
    }

 

  插入操作插入一个几何对象到面板,插入命令包含几何对象和对Canvas的引用。在插入命令中,Execute方法添加对象到画布,而Unexecute方法从画布中删除该对象。

class DeleteCommand : ICommand
    {
        
private FrameworkElement _UiElement;
        
private Canvas _Container;

        
public DeleteCommand(FrameworkElement uiElement, Canvas container)
        {
            _UiElement
= uiElement;
            _Container
= container;
        }

        
#region ICommand Members

        
public void Execute()
        {
            _Container.Children.Remove(_UiElement);
        }

        
public void UnExecute()
        {
            _Container.Children.Add(_UiElement);
        }

        
#endregion
    }

  因为删除操作从面板中删除一个几何对象,因此删除命令带有几何对象和画布的应用。在删除对象中,Execute方法从画布中删除对象,而Unexecute方法添加这个对象到画布。

0
相关文章