Класс XAMLServices и базовый код XAML для чтения или записи
XamlServices — это класс, предоставляемый .NET, который можно использовать для решения сценариев XAML, для которых не требуется конкретный доступ к потоку узлов XAML или системным данным типа XAML, полученным из этих узлов. XamlServices API можно свести в сводку следующим образом: Load
или Parse
поддерживать путь загрузки XAML, Save
поддерживать путь сохранения XAML, а Transform
также предоставлять метод, который присоединяет путь загрузки и сохраняет путь. Можно использоватьTransform
для изменения одной схемы XAML на другую. В этом разделе собраны все классификации этих API и приведены различия между определенными перегрузками методов.
Загрузить
Различные перегрузки метода Load полностью реализуют логику пути загрузки. Путь загрузки использует XAML в определенной форме и выводит поток узлов XAML. Большинство этих путей загрузки используют XAML в виде кодированного текстового файла XML. Однако также можно загрузить обычный поток или предварительно загруженный источник XAML, который уже содержится в другой реализации XamlReader .
Простейшая перегрузка для большинства сценариев — Load(String). Эта перегрузка имеет fileName
параметр: просто имя текстового файла, содержащего XAML для загрузки. Это подходит для таких сценариев применения как приложения с полным доверием, которые ранее выполнили сериализацию состояния или данных на локальном компьютере. Это также полезно для платформ, где вы определяете модель приложений и хотите загрузить один из стандартных файлов, определяющих поведение приложений, начальный пользовательский интерфейс или прочие определяемые платформой возможности, использующие XAML.
Load(Stream) используется в аналогичных сценариях. Эта перегрузка может быть полезна, если пользователю предоставляется возможность выбора файлов для загрузки, так как Stream часто представляет собой выходные данные других API System.IO , которые могут получить доступ к файловой системе. Также можно получать доступ к источникам XAML посредством асинхронных загрузок или другими сетевыми способами, также предоставляющими потоки. (Загрузка из потока или выбранного пользователем источника может иметь последствия для безопасности. Дополнительные сведения см. в разделе "Вопросы безопасности XAML".)
Load(TextReader) и Load(XmlReader) являются перегрузками, которые используют средства чтения форматов из предыдущих версий .NET. Чтобы использовать эти перегрузки, необходимо уже создать экземпляр средства чтения и использовать его Create
API для загрузки XAML в соответствующей форме (текст или XML). Это не имеет значения, если вы уже переместили указатели записей в других средствах чтения или выполняли другие операции с ними. Логика пути загрузки из Load всегда обрабатывает все входные данные XAML, начиная с корневого элемента. В следующих сценариях может потребоваться использовать эти перегрузки:
Рабочие области, где реализуются простые возможности редактирования XAML с помощью существующего текстового редактора, поддерживающего XML.
Варианты основных сценариев System.IO , где для открытия файлов или потоков используются выделенные средства чтения. Логика выполняет простую проверку или обработку содержимого перед повторной попыткой загрузки в формате XAML.
Вы можете загрузить файл или поток или загрузить или XmlReaderTextReaderXamlReader загрузить входные данные XAML, загрузив их с помощью API чтения.
Каждая из указанных выше перегрузок представляет собой Load(XmlReader), и переданный XmlReader используется для создания нового XamlXmlReader.
Подпись Load
для более сложных сценариев — Load(XamlReader). Эту подпись можно использовать в одном из следующих случаев:
Вы определили собственную реализацию XamlReader.
Для XamlReader необходимо задать параметры, отличающиеся от параметров по умолчанию.
Примеры параметров, отличных от по умолчанию:
AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.
Средство чтения для XamlServices по умолчанию — XamlXmlReader. Если вы предоставляете собственные XamlXmlReader параметры, следующие свойства предназначены для задания не по умолчанию XamlXmlReaderSettings:
CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve
Разбор
Parse и Load
схожи, поскольку это путь загрузки API, который создает поток узлов XAML из входных данных XAML. Однако в этом случае входные данные XAML предоставляются непосредственно в виде строки, содержащей весь код XAML для загрузки. Parse — упрощенный подход, который больше подходит для сценариев приложений, чем для сценариев платформ. Дополнительные сведения см. в разделе Parse. Parse — это просто завернутый Load(XmlReader) вызов, который включает внутреннее StringReader .
Сохранить
Различные перегрузки Save реализуют путь сохранения. Все методы Save принимают граф объекта на вход, а выходом является поток, файл или экземпляр XmlWriter/TextWriter .
Входной объект должен быть корневым объектом какого-либо объектного представления. Это может быть единственный корневой элемент бизнес-объекта, корневой объект дерева объектов страницы в сценарии с пользовательским интерфейсом, рабочая область редактирования в средстве разработки или другие подходящие виды корневых объектов.
Во многих сценариях дерево объектов, которое вы сохраняете, связано с исходной операцией, которая загружала XAML либо с Load другим API, реализованным платформой или моделью приложения. В полученном дереве объектов могут быть различия, связанные с изменениями состояния, изменениями при получении от пользователя параметром среды выполнения, измененного XAML в случае, когда приложение является областью редактирования XAML и т. д. Вне зависимости от различий принцип, согласно которому сначала происходит загрузка XAML из разметки, а затем происходит его сохранение и сравнение двух форм разметки XAML, иногда называется представлением приема-передачи XAML.
Задача при сохранении и сериализации сложного объекта, заданного в форме разметки, состоит в достижении баланса между полным представлением без потери информации и детализацией, в силу которой XAML становится менее удобочитаемым. Кроме того, у разных пользователей XAML могут быть разные определения или ожидания относительно такого баланса. API Save представляют одно определение такого баланса. API Save используют доступный контекст схемы XAML и характеристики XamlType, XamlMemberи других встроенных функций XAML и других понятий системных типов XAML по умолчанию на базе CLR, чтобы определить, можно ли оптимизировать определенные конструкции потока узлов XAML при их сохранении в разметку. Например, пути сохранения XamlServices могут использовать контекст схемы XAML по умолчанию на основе CLR для преобразования XamlType для объектов, могут определять XamlType.ContentProperty, а затем могут опускать теги элементов свойства при записи свойства в содержимое XAML объекта.
Преобразование
Transform преобразует XAML, связывая путь загрузки и путь сохранения в одну операцию. Для XamlReader и XamlWriterможет использоваться другой контекст схемы или другая система резервных типов, что повлияет на преобразование полученного XAML-кода. Это хорошо подходит для операций широкого преобразования.
Transformобычно не используется для операций, зависящих от проверки каждого узла в потоке узлов XAML, Вместо этого необходимо определить собственную серию операций с путями загрузки и сохранения и использовать собственную логику. В одном из путей используйте пару из средства чтения и средства записи XAML в собственном цикле узлов. Например, можно загрузить исходный XAML с помощью XamlXmlReader , а затем переходить в узлы при помощи последовательных вызовов Read . Работая на уровне потока узлов XAML, можно настраивать отдельные узлы (типы, члены, другие узлы) для применения преобразований или оставить узлы как есть. Затем можно передать узел дальше в соответствующий API Write
XamlObjectWriter и записать объект. Для получения дополнительной информации см. Understanding XAML Node Stream Structures and Concepts.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по