我使用Telerik的RadDiagram
1-我有什么: 我在这里应用了同样的例子http://www.telerik.com/help/wpf/raddiagram-extensions-toolbox.html 但是,myShape的内容是一个图像(我有几何图形)当我将它放入RadDiagram时,它会在反序列化中生成我的一个自定义类的新实例。我是通过序列化Header来做到这一点的,这是我在反序列化中的提示键,用于为丢弃的形状生成正确的自定义类。
我的活动:
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-我需要的是什么: 当我通过owner.fileManager.SaveToFile()保存图表时; 我无法在xml文件中找到Content属性或任何无法序列化的SerializationInfo!我添加了这一行
e.SerializationInfo["Content"] = myShape.Header;
序列化事件中的仍然是相同的
我需要检索用户将使用的相同设计!
在调试模式下,保存没有点击序列化事件 - 这意味着它取决于第一个序列化!虽然它在我放弃形状和我加载XML时遇到了DeSerialization Event。在加载文件时,它总是在
的DeSerialization Event内部中断 shape.Content = e.SerializationInfo["DataContent"].ToString(); shape.Content = e.SerializationInfo["Content"].ToString();
并说&#34;对象引用未设置为对象的实例&#34;!
答案 0 :(得分:0)
我得到了答案,序列化项目的拖动不同于序列化保存
http://www.telerik.com/forums/save-and-load-custom-controls