diff --git a/Source/SvgElement.cs b/Source/SvgElement.cs index dbfab0115105d94cec3d770d5a7a42a69c1e3e52..fbd7def20f4b4099304235e64caf61793e07380c 100644 --- a/Source/SvgElement.cs +++ b/Source/SvgElement.cs @@ -676,9 +676,7 @@ namespace Svg if (this.Transforms != null) { - newObj.Transforms = new SvgTransformCollection(); - foreach (var transform in this.Transforms) - newObj.Transforms.Add(transform.Clone() as SvgTransform); + newObj.Transforms = this.Transforms.Clone() as SvgTransformCollection; } foreach (var child in this.Children) diff --git a/Source/Transforms/SvgTransformCollection.cs b/Source/Transforms/SvgTransformCollection.cs index a7164b18949923052fc4c325c1cb644a8b37c536..3b5acfbbb179472b4396e03ab853c96db74d2ec9 100644 --- a/Source/Transforms/SvgTransformCollection.cs +++ b/Source/Transforms/SvgTransformCollection.cs @@ -8,12 +8,16 @@ using System.Text; namespace Svg.Transforms { [TypeConverter(typeof(SvgTransformConverter))] - public class SvgTransformCollection : List + public class SvgTransformCollection : List, ICloneable { - - public new void Add(SvgTransform item) + private void AddItem(SvgTransform item) { base.Add(item); + } + + public new void Add(SvgTransform item) + { + AddItem(item); OnTransformChanged(); } @@ -91,9 +95,19 @@ namespace Svg.Transforms var handler = TransformChanged; if(handler != null) { - handler(this, new AttributeEventArgs { Attribute = "transform", Value = this }); + //make a copy of the current value to avoid collection changed exceptions + handler(this, new AttributeEventArgs { Attribute = "transform", Value = this.Clone() }); } - } - + } + + public object Clone() + { + var result = new SvgTransformCollection(); + foreach (var trans in this) + { + result.AddItem(trans.Clone() as SvgTransform); + } + return result; + } } }