Поделиться через


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. Это означает, что он не отображается и не может бытьдоступ с помощью каких-либо методов дерева объектов, применяемых к дереву объектов main приложения WPF (например, APIFindName, 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 пространстве имен и сборке System.Windows.Markup PresentationFramework и из нихXamlReader. Однако средства чтения 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

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

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

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