Я хочу сериализовать UserControl в Silverlight. Все, что я хочу сделать, это «глубокое копирование». Я пробовал этот код, который не работает:
using System.Windows;
using System.Windows.Controls;
using System.Runtime.Serialization;
using System.IO;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(UserControl));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, this);
}
}
}
}
Я получаю это исключение:
Type 'System.Windows.UIElement' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. Alternatively, you can ensure that the type is public and has a parameterless constructor - all public members of the type will then be serialized, and no attributes will be required.
Как мне избавиться от этого исключения?
Очевидный вопрос, который вы хотели бы задать, - зачем мне сериализовать UserControl? Причина, я пытаюсь использовать Печать API Silverlight. Я создаю WriteableBitmap из моего UserControl, а затем пытаюсь распечатать его. Однако мой UserControl имеет черную тему, но при печати она должна быть белой. Если я напрямую изменю «Фон» в UserControl, это повлияет на мое изображение на экране, а это не то, что я хочу! Поэтому я пытаюсь создать клон пользовательского контроля в памяти, а затем изменить его фон за кулисами, создать из него WriteableBitmap и распечатать его. Однако не повезло до сих пор!