0

我正在使用 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 事件。在加载文件时,它总是在 DeSerialization 事件中中断

            shape.Content = e.SerializationInfo["DataContent"].ToString();                     shape.Content = e.SerializationInfo["Content"].ToString();

并说“对象引用未设置为对象的实例”!

4

1 回答 1

0

我得到了答案,从拖动中对项目进行序列化,而不是在保存时对其进行序列化
http://www.telerik.com/forums/save-and-load-custom-controls

于 2014-11-30T07:36:21.910 回答