如何制作UIElement的深层副本?

时间:2011-05-25 12:31:37

标签: printing silverlight-4.0 deep-copy uielement

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

2 个答案:

答案 0 :(得分:1)

如果您已经完成了手动保存以前值的麻烦,那么您似乎非常接近于创建对象的新实例并设置其属性。

如果UI元素已标记为可序列化,则可以clone the object pretty easily.

答案 1 :(得分:1)

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

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

将带有序列化程序的对象保存到内存流并从中重新创建 - 可能并非所有对象都标记为可序列化,因此可能是另一个选项。

它可能看起来有点多 - 但创建深层副本的方法并不多 - 而且我所知道的并不是任何标准的c#方法。