Я хочу Сериализовать UserControl в Silverlight. Все, что я хочу сделать, это «глубокое копирование». Я попробовал этот код, который не работает:Сериализация 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 и распечатать его. Но пока не повезло!
Вы ... попытались выполнить инструкции, приведенные в сообщении об исключении? –
Как я могу это сделать? UIElement все присутствуют в DLL. Как я могу пометить их Serializable? – TCM
Вы можете отметить свой класс как Serializable, он не обязательно должен быть базовым объектом. –