0

Silverlight 5 のキャンバスに Undo-Redo 操作を実装しようとしています。このため、各操作の後にキャンバスをスタックに保存し、元に戻す操作またはやり直し操作で、既存のキャンバスを既存のキャンバスに置き換えたいと考えています。スタック。

直面している問題は、現在のキャンバスを一時変数と同一視すると、新しいコピーが作成されず、両方のキャンバス変数が同じキャンバスを参照することです。つまり、一方で行われた変更が他方に反映されます。これは、現在のキャンバスを変更し、元に戻して一時キャンバス (操作が実行される前に現在のキャンバスと同等であった) に置き換えると問題が発生し、一時キャンバスは前のキャンバス (つまり現在のキャンバス) で行われた変更も取得します。 .

キャンバスを個別にコピーするにはどうすればよいですか?? 助けてください。

以下のように初期化しています。

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

1 に答える 1

1

完全な .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 によるこのジェネリック クラスを使用して、次のように sliverlight オブジェクトを複製できます。

CloneObject.DeepClone<Canvas>(source,true);
于 2013-06-20T10:53:03.303 に答える