Службы 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:);