如何快速复制 UIElement?

Posted

技术标签:

【中文标题】如何快速复制 UIElement?【英文标题】:How to copy an UIElement fast? 【发布时间】:2018-11-03 20:04:00 【问题描述】:

我需要复制一个UIElement。 我搜索了一个解决方案,发现了这个例子:

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);

效果很好。 我的应用程序复制了一长串UIElements,我发现这需要很多时间。 有人知道如何更快地复制UIElements?

【问题讨论】:

【参考方案1】:

您可以在 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);
        
    

用法

Canvas copy = canvas1.GetCopy();

【讨论】:

这并不比 OP 的方法快。

以上是关于如何快速复制 UIElement?的主要内容,如果未能解决你的问题,请参考以下文章

如何以相同的触摸在多个 UIElement 上触发 ManipulationStarted?

如何自动在标签中放入 UIElement 的名称

拖动某些东西时如何在 UIElement 周围显示一个简单的边框

Silverlight 4 - 将 UIElement 渲染为图像

如何让我的应用程序表现得像我正在使用 Swift 在运行时更改 Application is agent(UIElement)?

在 UIAutomation 中使用accessibilityIdentifier 获取UIElement