Класс 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.
Вы можете загрузить файл или поток или загрузить XmlReader, TextReaderили XamlReader, которые упаковывают входные данные 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 и характеристики среды CLR по умолчанию для XamlType, XamlMemberи других встроенных и системных концепций типов XAML, чтобы определить, где можно оптимизировать определенные конструкции потока узлов XAML, если они сохраняются обратно в разметку. Например, XamlServices пути сохранения могут использовать контекст схемы XAML на основе CLR по умолчанию для разрешения XamlType для объектов, может определить XamlType.ContentProperty, а затем может опустить теги элементов свойства при записи свойства в содержимое XAML объекта.
Трансформировать
Transform преобразует или преобразует XAML путем связывания пути загрузки и пути сохранения в виде одной операции. Для XamlReader и XamlWriterможно использовать другой контекст схемы или другую систему резервного типа, что влияет на преобразование результирующего XAML. Это хорошо подходит для широких операций преобразования.
Для операций, использующих проверку каждого узла в потоке узлов XAML, обычно не используется Transform. Вместо этого необходимо определить собственный ряд операций пути сохранения пути загрузки и перепроектировать собственную логику. В одном из путей используйте пару чтения XAML или записи XAML вокруг собственного цикла узла. Например, загрузите исходный XAML с помощью XamlXmlReader и перейдите к узлам с последовательными вызовами Read. Работая на уровне потока узлов XAML, теперь можно настроить отдельные узлы (типы, члены, другие узлы), чтобы применить преобразование или оставить узел as-is. Затем вы отправляете узел в соответствующий API Write
XamlObjectWriter и записываете объект. Дополнительные сведения см. в статье Общие сведения о структурах и концепциях потока узлов XAML.
См. также
.NET Desktop feedback