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)

Комментарии

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

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

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

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

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

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

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

Note

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

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

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

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

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

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

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

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

Типы WPF и технология WPF в целом поддерживают концепции, основанные на доступе к внутренним компонентам WPF. Например, как WPF реализует свойства зависимостей, использует внутренние методы для эффективного поиска элементов типа. Доступ к этим внутренним компонентам включен с помощью API чтения и записи XAML, предоставляемых в XamlWriterXamlReader пространстве имен и сборке 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, Boolean)

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

Load(Stream, ParserContext, Boolean)

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

Load(Stream, ParserContext)

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

Load(Stream)

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

Load(XamlReader)

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

Load(XmlReader, Boolean)

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

Load(XmlReader)

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

LoadAsync(Stream, Boolean)

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

LoadAsync(Stream, ParserContext, Boolean)

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

LoadAsync(Stream, ParserContext)

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

LoadAsync(Stream)

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

LoadAsync(XmlReader, Boolean)

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

LoadAsync(XmlReader)

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

MemberwiseClone()

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

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

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

Parse(String, ParserContext, Boolean)

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

Parse(String, ParserContext)

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

Parse(String)

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

ToString()

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

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

События

Имя Описание
LoadCompleted

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

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

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