如何复制克隆 UIElement 并保留布局/渲染信息?
我希望复制一个复杂的数据绑定 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;
这是一个好方法吗?它适用于复杂的 UIElements(例如,边框内的大量面板、自定义控件等)吗?
为了给您提供一个上下文,我正在制作一个 DocumentPaginator
,它运行良好,但由于重新创建相同的 UIElements 而效率低下。
提前致谢, 皮特
I wish to copy a complex data-bound UIElement
but keep the Binding, Layout and Rendering information from the original UIElement.
Creating a new UIElement
seems inefficient since I would have to do another complete Binding/Measure/Arrange/Render pass.
The closest I've got so far is to create a new DrawingVisual
, open it for rendering, and DrawDrawing using the source UIElement DrawingGroup
.
DrawingVisual dv = new DrawingVisual();
DrawingGroup dg = VisualTreeHelper.GetDrawing(SourceElement);
using (DrawingContext dc = dv.RenderOpen())
{
Drawing d = dg.Children[0];
dc.DrawDrawing(d);
}
return dv;
Is this a good approach and will it work for complex UIElements (e.g. lots of Panels within Borders, custom Controls etc etc)?
To give you a context, I am making a DocumentPaginator
which is working well, but inefficeintly due to the recreation of identical UIElements.
Thanks in advance,
Pete
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果仅用于演示目的,您可以使用 VisualBrush< /a>.更多信息可以在此处、此处,以及此处。它甚至反映了对附加视觉效果所做的任何实时更新。
If it's only for presentation purposes, you can use a VisualBrush. More information can be found here, here, and here. It even reflects any live updates made to the attached visual.