C# 使用现有变量初始化画布变量

C# 使用现有变量初始化画布变量,c#,xaml,canvas,silverlight-5.0,C#,Xaml,Canvas,Silverlight 5.0,我试图在Silverlight 5的画布上实现撤消重做操作。为此,我想在每次操作后将画布保存到堆栈中,在撤消或重做操作时,我想用堆栈中的画布替换现有画布 面临的问题是,当我将当前画布等同于一个临时变量时,不会创建新的副本,但两个画布变量都引用同一画布,即一个画布中所做的更改会反映到另一个画布上。当我更改当前画布,然后撤消以替换为临时画布(在执行操作之前等同于当前画布)时,这会产生问题,临时画布也会获得在上一个画布(即当前画布)上所做的更改 如何在画布上单独复制??请帮忙 我正在初始化如下: Ca

我试图在Silverlight 5的画布上实现撤消重做操作。为此,我想在每次操作后将画布保存到堆栈中,在撤消或重做操作时,我想用堆栈中的画布替换现有画布

面临的问题是,当我将当前画布等同于一个临时变量时,不会创建新的副本,但两个画布变量都引用同一画布,即一个画布中所做的更改会反映到另一个画布上。当我更改当前画布,然后撤消以替换为临时画布(在执行操作之前等同于当前画布)时,这会产生问题,临时画布也会获得在上一个画布(即当前画布)上所做的更改

如何在画布上单独复制??请帮忙

我正在初始化如下:

Canvas temp = new Canvas();
temp = currentCanvas;

在完整的.Net framework中,可以使用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,因此可以使用克隆silverlight对象,如下所示:

CloneObject.DeepClone<Canvas>(source,true);
CloneObject.DeepClone(源代码,true);

谢谢您的回复。请您也指定所需的库。只需参考
System.Windows.Markup
dll即可。
XamlWriter
XamlReader.Create
仍无法识别。救命!!您需要添加对
System.Windows.Markup
的引用。下面是如何操作的说明:我无法在参考中找到System.Windows.Markup.dll,但当我使用System.Windows.Markup添加此
对于我的代码,
XamlReader.Load
正在被识别,但是上面提到的其余两个函数仍然无法识别。我需要下载dll吗?或者我丢失了其他内容?您不应该保存画布。相反,您应该保存画布的状态,这需要创建该状态的抽象表示。因此,您还可以将应用程序分离为模型和视图。