Сохранить и загрузить пользовательские элементы управления
Я использую RadDiagram от Telerik
1- То, что у меня есть: я применил тот же пример здесь http://www.telerik.com/help/wpf/raddiagram-extensions-toolbox.html Но содержимое myShape - это изображение (у меня нет геометрии), когда Я помещаю его в RadDiagram, он генерирует новый экземпляр одного из моих пользовательских классов по десериализации. Я делаю это путем сериализации Заголовка, который является для меня ключом подсказки в десериализации для генерации правильного пользовательского класса для отброшенной фигуры.
Мои события:
void diagram_ShapeSerialized(object sender, SerializationEventArgs<IDiagramItem> e)
{
var shape = e.Entity as RadDiagramShape;
if (shape != null)
{
var myShape = shape.DataContext as GalleryItem;
if (myShape != null)
{
e.SerializationInfo["DataContent"] = myShape.Header;
}
}
}
private void RadDiagram_ShapeDeserialized(object sender, ShapeSerializationRoutedEventArgs e)
{
var shape = e.Shape as RadDiagramShape;
if (shape != null)
{
shape.Content = e.SerializationInfo["DataContent"].ToString();
switch (shape.Content.ToString())
{
//Charts
case "TimeChart":
shape.Content = new MyTimeChart(); break;
case "ValueChart":
shape.Content = new MyTimeValue(); break;
//...etc
}
}
}
2 - Что мне нужно: когда я сохраняю диаграмму владельцем.fileManager.SaveToFile(); Я не могу найти внутри xml-файла свойство Content или любое SerializationInfo, которое означает, что ничего нельзя сериализовать! Я добавил эту строку
e.SerializationInfo["Content"] = myShape.Header;
в событии сериализации и все тот же
Мне нужно получить тот же дизайн, который сделает пользователь!
В режиме отладки сохранение не попадает в событие сериализации - это означает, что оно зависит от первой сериализации! Хотя он попадает в событие DeSerialization, когда я отбрасываю форму и когда я загружаю XML. А во время загрузки файла он всегда прерывается внутри события DeSerialization при
shape.Content = e.SerializationInfo["DataContent"].ToString(); shape.Content = e.SerializationInfo["Content"].ToString();
и говорит "Ссылка на объект не установлена на экземпляр объекта"!
1 ответ
Я получил ответ, сериализация элемента от перетаскивания отличается от сериализации в сохранении
http://www.telerik.com/forums/save-and-load-custom-controls