【问题标题】:How to copyclone a UIElement and keep the layout/render information?如何复制 UIElement 并保留布局/渲染信息?
【发布时间】:2011-08-18 22:02:08
【问题描述】:

我希望复制一个复杂的数据绑定UIElement,但保留原始 UIElement 的绑定、布局和渲染信息。

创建一个新的UIElement 似乎效率低下,因为我必须执行另一个完整的绑定/测量/排列/渲染通道。

到目前为止,我最接近的是创建一个新的DrawingVisual,打开它进行渲染,然后使用源 UIElement DrawingGroup 进行 DrawDrawing。

DrawingVisual dv = new DrawingVisual();
DrawingGroup dg = VisualTreeHelper.GetDrawing(SourceElement);

using (DrawingContext dc = dv.RenderOpen())
{
     Drawing d = dg.Children[0];
     dc.DrawDrawing(d);
}

return dv;

这是一种好方法吗?它是否适用于复杂的 UIElement(例如,边框内的大量面板、自定义控件等)?

为了给你一个背景,我正在制作一个DocumentPaginator,它运行良好,但由于重新创建了相同的 UIElement 而效率低下。

提前致谢, 皮特

【问题讨论】:

    标签: c# wpf clone uielement


    【解决方案1】:

    如果仅用于演示目的,您可以使用VisualBrush。更多信息请访问hereherehere。它甚至反映了对附加视觉对象所做的任何实时更新。

    【讨论】:

    • 感谢您的建议,但我想避免使用“VisualBrush”,因为它确实反映了附加视觉对象的更改。我希望能够创建一个新的“UIElement”(或“Visual”),它使用源“UIElement”信息(耗时布局和渲染信息)来制作独立的“Visual”(不 反映对 SourceUIElement 的更改)
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多