Службы XAML

В этом разделе описываются возможности набора технологий, известного как службы XAML платформы .NET Framework. Большинство описанных служб и API-интерфейсов находятся в сборке System.Xaml, впервые появившейся вместе с набором основных сборок .NET в .NET Framework 4. В число этих служб входят средства чтения и записи, классы схемы и поддержка схемы, фабрики, назначение атрибутов классов, поддержка встроенных функций языка XAML и другие возможности языка XAML.

Об этой документации

В основной документации для служб XAML платформы .NET Framework предполагается наличие у читателя опыта использования языка XAML и его применения к конкретной платформе, например к Windows Presentation Foundation (WPF) или к Windows Workflow Foundation, или к конкретной области функциональных возможностей, например возможностей настройки построения в Microsoft.Build.Framework.XamlTypes. В этой документации не ставятся задачи объяснить основы XAML как языка разметки, технологии синтаксиса XAML и другие вводные сведения. Вместо этого основное внимание уделяется именно использованию служб XAML платформы .NET Framework, доступных в библиотеке сборки System.Xaml. Большинство описываемых API-интерфейсов предназначено для сценариев интеграции и расширяемости языка XAML. Сюда может быть отнесен любой из следующих вопросов.

  • Расширение возможностей базовых средств чтения или записи XAML (непосредственная обработка потока узлов XAML, разработка собственного средства чтения или записи XAML).

  • Определение пользовательских типов, пригодных для использования в языке XAML, которые не обладают зависимостями от конкретной платформы, и присвоение атрибутов типам для передачи характеристик системы типов XAML службам XAML платформы .NET Framework.

  • Размещение средств чтения или записи XAML в качестве компонентов приложения, таких как визуальный конструктор или интерактивный редактор для источников разметки XAML.

  • Написание преобразователей значений XAML (расширения разметки; преобразователи для пользовательских типов).

  • Определение пользовательского контекста схемы XAML (использование альтернативных методик загрузки сборок для источников резервных типов; использование методик поиска известных типов вместо постоянного отражения сборок; использование концепций загруженных сборок, не предполагающих использования домена приложения AppDomain среды CLR и связанной с ним модели безопасности).

  • Расширение базовой системы типов XAML.

  • Использование методик Lookup или Invoker для оказания влияния на систему типов XAML и на порядок оценки резервов типов.

При необходимости вводные материалы о языке XAML можно попытаться найти в разделе Общие сведения о языке XAML (WPF). В этом разделе XAML описывается для аудитории, незнакомой как с Windows Presentation Foundation (WPF), так и с использованием разметки XAML и возможностей языка XAML. Другим полезным документом является вводный материал в спецификации языка XAML [MS-XAML].

Службы XAML платформы .NET Framework и сборка System.Xaml в архитектуре .NET

В предыдущих версиях Microsoft .NET Framework поддержка возможностей языка XAML была реализована платформами с построениями на основе Microsoft .NET Framework (Windows Presentation Foundation (WPF), Windows Workflow Foundation и Windows Communication Foundation (WCF)), и, следовательно, их поведение и используемый API менялись в зависимости от конкретной использовавшейся платформы. В число этих возможностей входили средство синтаксического анализа XAML и его механизм создания графов объектов, встроенные функции языка XAML, поддержка сериализации и т. д.

В .NET Framework 4 службы XAML платформы .NET Framework и сборка System.Xaml определяют большую часть всего необходимого для поддержки возможностей языка XAML. в том числе базовые классы для средств чтения и записи XAML. Самой важной возможностью, добавленной в службы XAML платформы .NET Framework и отсутствующей в любой из платформно-зависимых реализаций XAML, является представление системы типов для XAML. Представление системы типов обеспечивает объектно-ориентированное представление языка XAML, где возможности XAML занимают центральное место независимо от возможностей отдельной платформы.

Система типов XAML не ограничена ни формой разметки, ни особенностями времени выполнения, связанными с происхождением XAML, ни какой-либо конкретной системой резервных типов. В систему типов XAML входят объектные представления для типов, членов, контекстов схемы XAML, понятий уровня XML и других понятий или встроенных функций языка XAML. Использование или расширение системы типов XAML позволяет создавать производные классы, например, от средств чтения и записи XAML, и расширять функциональные возможности представлений XAML конкретными функциями, поддерживаемыми платформой, технологией или приложением, потребляющим или выдающим XAML-код. Концепция контекста схемы XAML позволяет выполнять запись графа объектов, используя сочетание реализации средства записи объектов XAML, системы резервных типов данной технологии в соответствии с информацией о сборке в контексте, а также источника узлов XAML. Дополнительные сведения о концепции схемы XAML см. в разделе Контекст схемы языка XAML по умолчанию и контекст схемы языка XAML WPF.

Потоки узлов XAML, средства чтения XAML и средства записи XAML

Для понимания роли, которую играют службы XAML платформы .NET Framework во взаимосвязи языка XAML и конкретных технологий, использующих XAML в качестве языка, полезно ознакомиться с концепцией потока узлов XAML и с влиянием этой концепции на API-интерфейс и на терминологию. Поток узлов XAML — это концептуальный посредник между представлением языка XAML и графом объектов, представляемым или определяемым кодом XAML.

  • Средство чтения XAML — это сущность, обрабатывающая XAML в некотором виде и создающая поток узлов XAML. В API средство чтения XAML представлено базовым классом XamlReader.

  • Средство записи XAML — это сущность, обрабатывающая поток узлов XAML и создающая что-то еще. В API средство записи XAML представлено базовым классом XamlWriter.

Двумя наиболее распространенными сценариями, использующими XAML, являются загрузка XAML для инициализации графа объектов и сохранение графа объектов из приложения или средства с созданием представления XAML (обычно в форме разметки, сохраняемой как текстовый файл). Загрузка XAML и создание графа объектов в этой документации часто называется путем загрузки. Сохранение или сериализация существующего графа объектов в XAML в этой документации часто называется путем сохранения.

Наиболее распространенный тип пути загрузки можно описать следующим образом:

  • Начать с представления XAML в формате XML с кодировкой UTF и сохраненного в виде текстового файла.

  • Загрузить этот XAML в средство чтения XamlXmlReader. XamlXmlReader является подклассом XamlReader.

  • Результатом является поток узлов XAML. Для доступа к отдельным узлам потока узлов XAML можно использовать API-интерфейс XamlXmlReader / XamlReader. Наиболее типичной операцией является перебор потока узлов XAML, при котором каждый узел обрабатывается с помощью метафоры "текущая запись".

  • Передать полученные узлы из потока узлов XAML в API-интерфейс XamlObjectWriter. XamlObjectWriter является подклассом XamlWriter.

  • XamlObjectWriter записывает граф объектов, по одному объекту за шаг, в соответствии с прохождением исходного потока узлов XAML. Это выполняется с помощью контекста схемы XAML и реализации, которая может получать доступ к сборкам и типам платформы и системы резервных типов.

  • Вызовите Result в конце потока узлов XAML, чтобы получить корневой объект графа объектов.

Наиболее распространенный тип пути сохранения можно описать следующим образом:

  • Начать с графа объектов всего приложения во время выполнения, содержимого пользовательского интерфейса и состояния времени выполнения либо с графа объектов меньшего сегмента объектного представления всего приложения во время выполнения.

  • Начиная с некоторого логического стартового объекта, такого как корень приложения или корень документа, загрузить объекты в XamlObjectReader. XamlObjectReader является подклассом XamlReader.

  • Результатом является поток узлов XAML. Для доступа к отдельным узлам потока узлов XAML можно использовать API-интерфейсы XamlObjectReader и XamlReader. Наиболее типичной операцией является перебор потока узлов XAML, при котором каждый узел обрабатывается с помощью метафоры "текущая запись".

  • Передать полученные узлы из потока узлов XAML в API-интерфейс XamlXmlWriter. XamlXmlWriter является подклассом XamlWriter.

  • Средство записи XamlXmlWriter записывает XAML-код в XML в кодировке UTF. Результат можно сохранить как текстовый файл или поток, либо в иной форме.

  • Вызовите Flush, чтобы получить конечный результат.

Дополнительные сведения о концепции потока узлов XAML см. в разделе Общее представление о понятиях и структурах потока узлов XAML.

Класс XamlServices

Не всегда необходимо обращаться к потоку узлов XAML. Если нужен только базовый путь загрузки или базовый путь сохранения, можно использовать API-интерфейсы класса XamlServices.

  • Различные сигнатуры метода Load реализуют путь загрузки. Можно либо загрузить файл или поток, либо загрузить средство чтения XmlReader, TextReader или XamlReader, обеспечивающее оболочку для входных данных XAML путем загрузки с помощью API-интерфейсов данного средства чтения.

  • Различные сигнатуры метода Save сохраняют граф объектов и создают результат в виде потока, файла или экземпляра XmlWriter/TextWriter.

  • Метод Transform преобразует XAML, связывая путь загрузки и путь сохранения в одну операцию. Для средств чтения XamlReader и записи XamlWriter могут использоваться другой контекст схемы или другая система резервных типов, которые и влияют на преобразование полученного XAML-кода.

Дополнительные сведения об использовании XamlServices см. в разделе Класс XAMLServices и чтение или запись базового кода XAML.

Система типов XAML

Система типов XAML предоставляет API-интерфейсы, необходимые для работы с заданным отдельным узлом потока узлов XAML.

XamlType является представлением объекта — тем, что обрабатывается между начальным и конечным узлами объекта.

XamlMember является представлением члена объекта — тем, что обрабатывается между начальным и конечным узлами члена.

Такие интерфейсы API, как GetAllMembers и GetMember и DeclaringType, передают связи между XamlType и XamlMember.

Поведение системы типов XAML по умолчанию, реализованное в службах XAML платформы .NET Framework, основано на среде CLR и статическом анализе типов CLR в сборках с помощью отражения. Следовательно, для любого отдельного типа CLR реализация системы типов XAML по умолчанию может предоставлять схему XAML для этого типа и его членов, а также передавать его, используя систему типов XAML. В системе типов XAML по умолчанию понятие назначаемости типов отображается на наследование среды CLR, а понятия экземпляров, типов значений и т. д. также отображаются на соответствующее поведение и возможности среды CLR.

Справочная информация о возможностях языка XAML

Для поддержки XAML службами XAML платформы .NET Framework предоставляется конкретная реализация понятий языка XAML в соответствии с определениями, заданными для пространства имен XAML языка XAML. Эти определения приводятся в виде отдельных страниц справочника. Возможности языка описываются с точки зрения их поведения при обработке средством чтения или записи XAML, определенным службами XAML платформы .NET Framework. Дополнительные сведения см. в разделе Возможности пространства имен языка XAML (x:);