用现有的Canvas变量初始化一个Canvas变量
本文关键字:Canvas 变量 一个 初始化 | 更新日期: 2023-09-27 18:19:23
我正试图在Silverlight 5中实现画布上的撤销-重做操作。为此,我想在每次操作后将画布保存到堆栈中,并且在撤消或重做操作时,我想用堆栈中的画布替换现有的画布。
面临的问题是,当我将当前画布与临时变量等同起来时,不会产生新的副本,但两个画布变量都指向同一个画布,即在一个中所做的更改会反映在另一个中。这就产生了问题,当我改变当前画布,然后撤消替换临时画布(这是相当于当前画布之前的操作执行),临时画布也得到的变化是在以前的画布上完成的(即。当前画布)。
我如何使单独的副本的画布??请帮助。
初始化如下:
Canvas temp = new Canvas();
temp = currentCanvas;
在完整的。net框架中,您可以使用XamlReader和-Writer创建克隆:
public Canvas Clone(Canvas source)
{
var savedObj = XamlWriter.Save(source);
var reader = new StringReader(savedObj);
var xmlReader = XmlReader.Create(reader);
var canvas = (Canvas)XamlReader.Load(xmlReader);
return canvas;
}
编辑:由于silverlight不支持XamlWriter和Reader,你可以使用Jim McCurdy的这个泛型类来克隆一个silverlight对象,如下所示:
CloneObject.DeepClone<Canvas>(source,true);