序列化WPF控件时出现异常

时间:2009-05-07 00:38:10

标签: wpf xaml xslt serialization xml-serialization

我有一个应用程序(约会管理器),它允许用户每按一次按钮在堆栈面板中创建用户控件,用户可以将数据输入到用户控件中。到目前为止一切都很好。

我使用XamlWriter.Save()序列化了stackpanel。但是当我尝试在下次使用XamlReader.Load()启动应用程序时再次加载它时,我得到以下异常:

  

“System.Windows.Markup.XamlParseException:   无法设置Name属性值   元素'Border'上的'border1'。   '边界'属于要素范围   '项目',已经有了名字   在定义时注册   另一个范围。线'4'位置   '43'。“

我在谷歌找到了一个解决方法,涉及删除所有似乎对我没用的控制名称。

现在您可以问,为什么必须使用Xml-Serialization。问题是,我们必须为我们的xml课程创建一个科学项目,其中必须至少使用xml-serialization和xslt,所以我认为这是一个好主意:(

1 个答案:

答案 0 :(得分:3)

我建议您不要序列化UI,而是序列化基础数据。

例如,创建一个名为Data的类,表示存储在用户控件中的数据。确保使用[Serializable]属性修饰此类。使用wpf的数据绑定功能来管理数据对象的CRUD操作。此时,您可以使用XmlSerializer序列化和反序列化数据对象。反序列化时,将用户控件绑定到数据对象,然后就完成了。

希望我有时间写一个快速的样本。

希望这有帮助