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 |
Происходит при завершении асинхронной операции загрузки. |