如何复制克隆 UIElement 并保留布局/渲染信息?

发布于 2024-11-05 03:46:35 字数 669 浏览 2 评论 0原文

我希望复制一个复杂的数据绑定 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房的律动 2024-11-12 03:46:35

如果仅用于演示目的,您可以使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文