如何制作 UIElement 的深层复制?

发布于 2024-11-10 02:21:24 字数 363 浏览 5 评论 0原文

所以我有一个为 Silverlight 应用程序提供服务的打印组件。该程序中的其他模块能够向打印组件发出信号并向其传递 UIElement,然后打印组件会将其绘制到屏幕上。一切都很好。当我尝试操作 UI 元素以便更好地格式化它以适应用户选择的纸张尺寸或任何达到该效果的内容时,问题就出现了;似乎传入的 UI 元素通常与屏幕上的 UI 元素完全相同,并且屏幕元素会自行更改以匹配我所做的“仅打印”更改。目前,我可以手动保存以前的值,进行更改并恢复以前的值,但如果我有办法在给定 UI 元素的情况下制作副本,则会更容易/更稳健/更高效/更灵活元素的属性,并自由地操作该元素,而无需担心原始 UI 元素的更改或状态。如何以编程方式复制 UI 元素的实例,以便拥有具有相同视觉外观的另一个实例?

So I have a printing component that serves a Silverlight application. Other modules in this program have the ability to signal the printing component and pass it a UIElement, which the printing component will then draw to the screen. All well and good. The problem arises when I try to manipulate the UI Element in order to better format it to fit the user's selected paper size or anything to that effect; it seems that the UI element that is passed in is frequently the exact same instance of the one on the screen, and the screen element changes itself to match the 'print-only' changes I have made. For now, I can manually save the previous values, make my changes, and restore the previous values, but it would be easier/more robust/more efficient/more flexible if I had a way to, given the UI element, make a copy of the element, and manipulate that freely, without worrying about alterations or state on the original UI element. How can I programatically copy an instance of a UI element such that I have another instance with the same visual appearance?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

屋顶上的小猫咪 2024-11-17 02:21:24

我知道您可以尝试两种方法:

将对象保存到 xaml 字符串并从中重新创建它。
XamlWriter.SaveXamlReader.Parse

使用序列化器将对象保存到内存流并从中重新创建它 - 可能并非所有对象都标记为可序列化,因此可能需要使用其他选项。

这可能看起来有点多 - 但创建深层副本的方法并不多 - 而且据我所知,没有任何标准的 C# 方法。

I know 2 ways you can try:

Save the object to a xaml string and recreate it from it.
(XamlWriter.Save and XamlReader.Parse)

Save the object with the serializer to a memorystream and recreate it from that - it is possible that not all objects are marked serializable so the other option might be the one to use.

It might seem a bit much - but there are not so many ways to create a deep copy - and not any standard c# method that I know of.

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