XamlReader Класс

Определение

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Наследование
XamlReader

Примеры

В следующем примере преобразовывается Button в строку с помощью XamlWriter класса . Затем строка загружается обратно в с Button помощью статического Load метода класса XamlReader .

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

Комментарии

Синхронные методы являются статическими, но асинхронные LoadLoadAsync методы не являются статическими и требуют использования экземпляра XamlReader класса .

Выходными данными Load методов является один объект, представляющий корневой объект созданного дерева объектов или графа объектов. Графы объектов, созданные , XamlReader обычно добавляются в существующее дерево объектов приложения WPF во время выполнения. В противном случае новый граф объектов считается отключенным для модели приложений WPF. Это означает, что он не отображается и не может бытьдоступ с помощью каких-либо методов дерева объектов, применяемых к основному дереву объектов приложения WPF (например, API FindName, LogicalTreeHelper, VisualTreeHelper). Дополнительные сведения о концепциях дерева объектов см. в разделе Деревья в WPF.

XamlReader поддерживает следующие основные сценарии:

  • Клонирование или фабрика объектов. Без дополнительных механизмов ссылочный тип обычно не может быть включен в несколько позиций в дереве объектов WPF. (Примеры дополнительных механизмов, которые обеспечивают поддержку совместного использования или повторного использования в WPF, включают объекты, основанные на Freezable, или поддержку общих объектов, таких как Brush на которые ссылается элемент из ResourceDictionary.) Один из способов клонирования объекта, который уже находится в дереве объектов, заключается в сериализации объекта с помощью XamlWriter.Save. Затем сериализованная строка используется в качестве входных данных для вызова Loadс потоком или XmlReader в качестве посредника.

  • Создание объектов на основе JIT-информации. Часто существуют и другие способы изменения состояния существующих объектов с задержкой привязки или ввода, предоставленного пользователем. Например, можно использовать одно и то же значение, чтобы задать несколько свойств или использовать привязку данных. Но если у вас есть сценарий, в котором даже тип создаваемого объекта определяется только во время выполнения или при взаимодействии с пользователем, создание такого объекта путем создания строки для Load ввода часто является полезным методом.

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

  • Исправлены документы: Приложение может загружать локальные или скачанные документы XPS для включения в дерево объектов приложения WPF и пользовательский интерфейс.

Примечание

В этой документации иногда описывается граф объектов, а не дерево объектов. Строгое отношение "родители-потомки" не всегда существует в отношениях объектов времени выполнения приложения WPF во время выполнения, поэтому граф объектов является более широко применимой терминологией. Однако поскольку WPF также включает два разных API концепции дерева (LogicalTreeHelper, VisualTreeHelper), метафора дерева по-прежнему адекватно применяется к большинству реальных случаев в WPF. Однако с точки зрения языка XAML граф объектов часто является лучшим способом подумать о том, как объекты создаются из XAML, так как сам язык XAML не обязательно определяет вспомогательные методы класса, которые снова возвращают связи в древовидную структуру.

Безопасность доступа к коду, свободный XAML и XamlReader

XAML — это язык разметки, непосредственно представляющий создание и выполнение объекта. Таким образом, элементы, созданные в XAML, имеют такие же возможности взаимодействия с системными ресурсами (например, сетевой доступ и операции ввода-вывода файловой системы), как и эквивалентный созданный код.

WPF поддерживает платформу безопасности .NET Code Access Security (CAS). Это означает, что содержимое WPF, работающее в зоне Интернет, сократило разрешения исполнения. "Свободный XAML" (страницы некомпилированного XAML, интерпретируемые во время загрузки средством просмотра XAML) и браузерное приложение XAML (XBAP) обычно выполняются в этой зоне Интернета и используют один и тот же набор разрешений. Однако XAML, загруженный в полностью доверенное приложение, имеет такой же доступ к системным ресурсам, как ведущее приложение. Дополнительные сведения см. в разделе Безопасность частичного доверия в WPF.

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

XamlReader также может вызываться с помощью кода частичного доверия. В этом случае для обеспечения безопасности доступа к коду применяется зона безопасности Интернета. Если что-либо в загруженном XAML является недопустимым в зоне безопасности Интернета, создается исключение синтаксического анализа XAML. В XBAP и других случаях, которые являются частичным доверием на уровне платформы, где XamlReader является частью выполнения, вы получите то же поведение исключения, что и при явных вызовах частичного доверия.

XAML WPF, средства чтения и записи XAML и управление версиями языка XAML

XAML2009 включает функции языка, такие как x:Reference и x:FactoryMethod. Для загрузки XAML, использующего эти функции, можно использовать сигнатуры Load или Parse . Однако эти функции языка не поддерживаются для XAML, который требуется скомпилировать разметку (например, XAML для действия сборки страницы в приложении WPF или любой XAML, который включает задачу компиляции разметки в действиях сборки).

Типы WPF и технология WPF в целом поддерживают концепции, основанные на доступе к внутренним службам WPF. Например, то, как WPF реализует свойства зависимостей, зависит от внутренних методов для эффективного поиска членов типа. Доступ к этим внутренним службам предоставляется с помощью API чтения и записи XAML, предоставляемых в XamlWriter пространстве имен и XamlReader сборке System.Windows.Markup PresentationFramework. Однако средства чтения XAML более низкого уровня и записи XAML из сборки System.Xaml (классы, основанные на System.Xaml.XamlReader, System.Xaml.XamlWriter) не имеют доступа к внутренним данным WPF. От System.Xaml нет зависимости от какой-либо сборки WPF. Без доступа к внутренним данным WPF средства чтения и записи System.Xaml не могут правильно загружать или сохранять все типы WPF или типы, основанные на типах WPF. В частности, читатели и записи System.Xaml не понимают таких понятий, как свойство зависимостей WPF, резервное хранилище свойств, или все особенности использования wpf стилей, словарей ресурсов и шаблонов. Поэтому у вас есть выбор:

  • Если вы загружаете типы WPF и (или) каким-либо образом используете XAML в форме BAML, используйте средства чтения XAML PresentationFramework и записи XAML.

  • Если вы не используете типы WPF или BAML-форму XAML и не используете реализацию средства чтения XAML или модуля записи XAML другой конкретной технологии по причинам, характерным для этой платформы, используйте средства чтения XAML System.Xaml и записи XAML.

Реализация резервного копирования System.Xaml в .NET 4

XamlReader — это вызываемая поверхность API для средства синтаксического анализа XAML на уровне платформы WPF. Одно и то же базовое средство синтаксического анализа XAML также выполняет загрузку и анализ XAML во время выполнения для приложений WPF, предназначенных для платформа .NET Framework 3.0 и платформа .NET Framework 3.5.

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

Конструкторы

XamlReader()

Инициализирует новый экземпляр класса XamlReader.

Методы

CancelAsync()

Прерывает текущую операцию асинхронной загрузки, если имеется отложенная асинхронная операция загрузки.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetWpfSchemaContext()

Возвращает объект XamlSchemaContext, который представляет параметры схемы контекста WPF для класса XamlReader.

Load(Stream)

Считывает входные данные XAML в указанном пространстве имен Stream и возвращает корневой объект Object соответствующего дерева объектов.

Load(Stream, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

Load(Stream, ParserContext)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.

Load(Stream, ParserContext, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

Load(XamlReader)

Считывает входные данные XAML через предоставленный класс XamlReader и возвращает корневой объект соответствующего дерева объектов.

Load(XmlReader)

Считывает входные данные XAML в указанном классе XmlReader и возвращает корневой объект соответствующего дерева объектов.

Load(XmlReader, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

LoadAsync(Stream)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.

LoadAsync(Stream, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

LoadAsync(Stream, ParserContext)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.

LoadAsync(Stream, ParserContext, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

LoadAsync(XmlReader)

Считывает входные данные XAML в указанном классе XmlReader и возвращает корневой объект соответствующего дерева объектов.

LoadAsync(XmlReader, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
Parse(String)

Считывает входные данные XAML в указанной текстовой строке и возвращает объект, соответствующий корню указанной разметки.

Parse(String, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

Parse(String, ParserContext)

Считывает разметку XAML в указанной текстовой строке (используя указанный класс ParserContext) и возвращает объект, соответствующий корню указанной разметки.

Parse(String, ParserContext, Boolean)

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

События

LoadCompleted

Происходит по завершении асинхронной операции загрузки.

Применяется к

См. также раздел