我正在使用 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();
并说“对象引用未设置为对象的实例”!