2011-05-04 65 views
2

我希望复制一个复杂的数据绑定UIElement,但保留来自原始UIElement的Binding,Layout和Rendering信息。如何复制UIElement并保留布局/渲染信息?

创建一个新的UIElement似乎效率低下,因为我不得不做另一个完整的Binding/Measure/Arrange/Render传递。

到目前为止,我得到的最接近的是创建一个新的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; 

这是一个很好的方法,它会为(内边框例如大量的面板,定制控件等等等等),复杂的UI元素的工作?

为了给你一个上下文,我制作了一个DocumentPaginator,它运行良好,但由于相同的UIElements的娱乐而无法使用。

由于提前, 皮特

回答

0

如果它只是用于演示的目的,你可以使用一个VisualBrush。更多信息可以参见hereherehere。它甚至反映了对附件视觉进行的任何实时更新。

+0

感谢您的建议,但我想避免'VisualBrush'的原因,它**确实**反映了所附的视觉变化。我希望能够创建一个新的'UIElement'(或'Visual'),它使用Source'UIElement'信息(计时布局和渲染信息)来创建一个独立的'Visual'(**不**反映SourceUIElement的变化) – Peter 2011-05-05 01:17:44