序列化WPF控件时出现异常

序列化WPF控件时出现异常,wpf,xaml,xslt,serialization,xml-serialization,Wpf,Xaml,Xslt,Serialization,Xml Serialization,我有一个应用程序(一个约会管理器),它允许用户每次单击按钮时在stackpanel中创建usercontrols,用户可以将数据输入usercontrols。到目前为止还不错 我用XamlWriter.Save()序列化了stackpanel。但是,当我下次尝试在应用程序以XamlReader.load()启动时再次加载它时,会出现以下异常: “System.Windows.Markup.XamlParseException: 无法设置名称属性值 元素“Border”上的“border1”。 “

我有一个应用程序(一个约会管理器),它允许用户每次单击按钮时在stackpanel中创建usercontrols,用户可以将数据输入usercontrols。到目前为止还不错

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

“System.Windows.Markup.XamlParseException: 无法设置名称属性值 元素“Border”上的“border1”。 “Border”在元素的范围内 “Item”,已具有名称 在中定义时注册 另一个作用域。行“4”位置 ‘43’。”

我在谷歌找到了一个解决办法,包括删除所有对我来说似乎没有用的控件名


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

我给你的一条建议是不要序列化UI,而是序列化底层数据

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

但愿我有时间写一个快速的样本


希望这有助于

我给您的一条建议是不要序列化UI,而是序列化底层数据

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

但愿我有时间写一个快速的样本

希望这有帮助