保存并加载自定义控件

时间:2014-11-26 13:24:49

标签: xml serialization telerik raddiagram

我使用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;!

1 个答案:

答案 0 :(得分:0)

我得到了答案,序列化项目的拖动不同于序列化保存
http://www.telerik.com/forums/save-and-load-custom-controls