Сериализация ограничений XamlWriter.Save
Обновлен: Ноябрь 2007
API-интерфейсSave можно использовать для сериализации содержимого приложения Windows Presentation Foundation (WPF) в качестве файла Язык XAML (Extensible Application Markup Language). Однако, существуют некоторые важные ограничения в то, что можно сериализовать. Эти ограничения и некоторые общие вопросы описаны в данном разделе.
В этом разделе содержатся следующие подразделы.
- Время выполнения, представление времени разработки
- Сериализация является самодостаточной
- Расширенные ссылки являются разыменованными
- Обработка событий не сохраняется
- Реалистичные сценарии использования XAMLWriter.Save
Время выполнения, представление времени разработки
Основная философия того, что может сериализоваться с помощью вызова Save, заключается в том, что результатом будет представление сериализованного объекта во время выполнения. Многие свойства разработки исходного файла XAML уже могут быть оптимизированы или потеряны во временя загрузки XAML в качестве объектов памяти, и не сохраняются при вызове Save для сериализации. Результат сериализации является эффективным представлением построенного логического дерева приложения, но не обязателен для исходного XAML, который его создал. Эти проблемы затрудняют использование сериализации Save как части расширенной оболочки конструктора XAML.
Сериализация является самодостаточной
Сериализованные выходные данные Save самодостаточны; все, что сериализуется, содержится внутри одной страницы XAML, с одним корневым элементом и отсутствием внешних ссылок, кроме Коды URI. Например, ссылочные ресурсы страницы ресурсов приложения будут отображаться, если они были компонентом сериализуемой страницы.
Расширенные ссылки являются разыменованными
Общие ссылки на объекты, сделанные различными расширенными форматами разметки, такими как StaticResource или Binding, будут разыменованы в процессе сериализации. Они были уже разыменованы на момент создания объектов памяти средой выполнения приложения, и логика Save повторно не посещает исходный XAML для восстановления таких ссылок для сериализованных выходных данных. Это потенциально замораживает привязки данных или полученное значение ресурса, используемого последним в представлении времени выполнения, с ограниченной или косвенной возможностью отличать такое значение от любого другого значения, установленного локально. Рисунки также сериализуются как объектные ссылки на изображения в том виде, в котором они существуют в проекте, вместо исходных ссылок, теряющих имя файла или URI, на который первоначально ссылались. Даже ресурсы, объявленные внутри одной и той же страницы, сериализованы там же, где они ссылались, а не там где сохранены в качестве ключа коллекции ресурсов.
Обработка событий не сохраняется
При сериализации обработчиков событий, которые добавляются с помощью XAML, они не сохраняются. XAML без кода (также без связанного механизма x:Code) не имеет способа сериализации процедурной логики среды выполнения. Поскольку сериализация является самодостаточной и ограничивается логическим деревом, не существует средства для хранения обработчиков событий. В результате атрибуты обработчика событий, и сам атрибут, и строковое значение имени обработчика, удаляются из выходных данных XAML.
Реалистичные сценарии использования XAMLWriter.Save
Так как ограничения, перечисленные здесь, является достаточно значительными, существует еще несколько подходящих сценариев использования Save для сериализации.
Вектор или вывод графической информации: выходные данные отображаемой области могут использоваться для воспроизведения того же вектора или рисунков при перезагрузке.
Поле форматированного текста и потоковые документы: текст, форматирование элементов и вложенность элементов сохраняются в выходных данных. Это может быть полезен для механизмов, оценивающих возможности буфер обмена.
Сохранение данных бизнес-объекта: если у вас есть сохраненные данные в пользовательских элементах, такие как данные XML, поэтому до тех пор, пока ваши бизнес-объекты следуют основным правилам XAML, например, предоставление пользовательских конструкторов и преобразование значений свойств по ссылке, эти бизнес-объекты могут быть сохранены с помощью сериализации.