Исключение при сериализации контролов WPF - PullRequest
0 голосов
/ 07 мая 2009

У меня есть приложение (менеджер встреч), которое позволяет пользователю создавать пользовательские элементы управления в стеке для каждого нажатия кнопки, и пользователь может вводить данные в пользовательские элементы управления. Пока все хорошо.

Я сериализовал панель стека с помощью XamlWriter.Save (). Но затем, когда я пытаюсь загрузить его снова при следующем запуске приложения с XamlReader.Load (), я получаю следующее исключение:

"System.Windows.Markup.XamlParseException: Невозможно установить значение атрибута Name 'border1' для элемента 'Border'. «Граница» находится в рамках элемента «Предмет», который уже имел название зарегистрировано, когда это было определено в другая сфера. Линия '4' Позиция '43'. "

Я нашел обходной путь в Google, включающий удаление всех имен элементов управления, которые мне не нужны.

Теперь вы можете спросить, зачем вам вообще использовать Xml-сериализацию. Дело в том, что мы должны создать научный проект для нашего xml-курса, в котором должны использоваться как минимум xml-сериализация и xslt, поэтому я подумал, что это будет отличной идеей: (* ​​1011 *

1 Ответ

3 голосов
/ 07 мая 2009

Один совет, который я бы дал вам, чтобы не сериализовать пользовательский интерфейс, а сериализовать базовые данные.

Например, создайте класс с именем Data, который представляет данные, хранящиеся в вашем пользовательском элементе управления. Убедитесь, что этот класс украшен атрибутом [Serializable]. Используйте возможности связывания данных wpf для управления операциями CRUD объекта данных. На этом этапе вы можете сериализовать и десериализовать ваш объект данных с помощью XmlSerializer. При десериализации привязывайте свой пользовательский элемент управления к объекту данных, и все готово.

Жаль, что я не успел написать быстрый образец.

Надеюсь, это поможет

...