C# 如何快速复制UIElement?

C# 如何快速复制UIElement?,c#,wpf,uielement,C#,Wpf,Uielement,我需要复制一个ui元素。 我搜索了一个解决方案,发现了以下示例: string saved = XamlWriter.Save(canvas1); StringReader sReader = new StringReader(saved); XmlReader xReader = XmlReader.Create(sReader); Canvas newCanvas = (Canvas)XamlReader.Load(xReader); stackPanel2.Children.Add

我需要复制一个
ui元素
。 我搜索了一个解决方案,发现了以下示例:

string saved = XamlWriter.Save(canvas1); 
StringReader sReader = new StringReader(saved); 
XmlReader xReader = XmlReader.Create(sReader); 
Canvas newCanvas = (Canvas)XamlReader.Load(xReader); 
stackPanel2.Children.Add(newCanvas);
它工作得很好。 我的应用程序复制了一长串
UIElement
s,我发现这需要很多时间。
有人知道如何更快地复制
UIElement
s吗?

您可以在UIElement上使用扩展方法:

static class ExtMethods
{
    public static T GetCopy<T>(this T element) where T : UIElement
    {
        using (var ms = new MemoryStream())
        {
            XamlWriter.Save(element, ms);
            ms.Seek(0, SeekOrigin.Begin);
            return (T)XamlReader.Load(ms);
        }
    }
}

这并不比OP的方法快。
Canvas copy = canvas1.GetCopy();