diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs index 1329a5c6bba..54d22566d1b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs @@ -48,9 +48,20 @@ public override Type ComponentType { get { return _xamlObject.ElementType; } } + void SetNameInternal(string newName) + { + _xamlObject.Name = newName; + } + public override string Name { get { return _xamlObject.Name; } - set { _xamlObject.Name = value; } + set { + UndoService undoService = this.Services.GetService(); + if (undoService != null) + undoService.Execute(new SetNameAction(this, value)); + else + SetNameInternal(value); + } } public override string Key { @@ -174,5 +185,52 @@ public override DesignItem Clone() } return item; } + + sealed class SetNameAction : ITransactionItem + { + XamlDesignItem designItem; + string oldName; + string newName; + + public SetNameAction(XamlDesignItem designItem, string newName) + { + this.designItem = designItem; + this.newName = newName; + + oldName = designItem.Name; + } + + public string Title { + get { + return "Set name"; + } + } + + public void Do() + { + designItem.SetNameInternal(newName); + } + + public void Undo() + { + designItem.SetNameInternal(oldName); + } + + public System.Collections.Generic.ICollection AffectedElements { + get { + return new DesignItem[] { designItem }; + } + } + + public bool MergeWith(ITransactionItem other) + { + SetNameAction o = other as SetNameAction; + if (o != null && designItem == o.designItem) { + newName = o.newName; + return true; + } + return false; + } + } } }