XamlReader Класс

Определение

Считывает входные данные XAML и создает граф объекта с использованием средства чтения XAML по умолчанию в составе WPF и соответствующего средства записи объектов XAML.Reads XAML input and creates an object graph, using the WPF default XAML reader and an associated XAML object writer.

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

Примеры

В следующем примере преобразуется Button в строку XamlWriter с помощью класса.The following example converts a Button into a string using the XamlWriter class. Затем строка загружается обратно в объект Button , используя статический Load метод для XamlReader класса.The string is then loaded back into a Button using the static Load method on the XamlReader class.

// 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 нуждаются в использовании экземпляра класса.The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

Выходные данные Load методов представляют собой один объект, представляющий корневой объект созданного дерева объектов или графа объекта.The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. Графы объектов, созданные с XamlReader помощью, обычно добавляются в существующее дерево объектов приложения WPF во время выполнения.Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. В противном случае новый граф объектов считается отключенным для модели приложения WPF.Otherwise the new object graph is considered disconnected for purposes of the WPF application model. Это означает, что он не отображается, и к нему нельзя получить доступ с помощью любых методов дерева объектов, применяемых к главному дереву объектов приложения WPF (например, API FindName- LogicalTreeHelperинтерфейсы VisualTreeHelper,,).This means that it does not render, and cannot be accessed using any of the object tree techniques as applied to the WPF application's main object tree (for example, the APIs FindName, LogicalTreeHelper, VisualTreeHelper). Дополнительные сведения об основных понятиях дерева объектов см. в разделе деревья в WPF.For more information on object tree concepts, see Trees in WPF.

XamlReaderподдерживает следующие основные сценарии.XamlReader supports the following primary scenarios:

  • Клонирование или фабрика объектов: Без дополнительных механизмов ссылочный тип обычно не может включаться в более чем одну точку в дереве объектов WPF.Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. (Примеры дополнительных механизмов, которые предлагают поддержку для совместного использования или повторного использования в WPF, включают объекты, Freezableоснованные на, или поддержку общих объектов, таких Brush как, на которые ссылаются ResourceDictionaryкак на элемент из.) Одним из способов клонирования объекта, который уже находится в дереве объектов, является сериализация объекта с помощью XamlWriter.Save.(Examples of additional mechanisms that offer support for sharing or re-use in WPF include objects that are based on Freezable, or support for commonly shareable objects such as Brush that are referenced as an item from a ResourceDictionary.) One way to clone an object that is already in the object tree is to serialize the object using XamlWriter.Save. Затем сериализованная строка используется в качестве входных данных для вызова Loadс помощью потока или XmlReader в качестве посредника.You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • Создание объектов на основе JIT-информации: Часто существуют другие способы, с помощью которых позднее связывание или предоставленные пользователем данные изменяют состояние существующих объектов.Constructing objects based on just-in-time information: There are often other ways to have late-binding or user-supplied input change the state of existing objects. Например, можно использовать одно и то же значение для задания более одного свойства или использовать привязку данных.For example you could use the same value to set more than one property, or use data binding. Но если у вас есть сценарий, в котором даже тип создаваемого объекта определяется только во время выполнения или при взаимодействии с пользователем, создание такого объекта путем создания строки для Load ввода часто является полезной методикой.But if you have a scenario where even the type of object to create is only determinable at run time or with user interaction, then creating such an object by building up a string for Load input is often a useful technique.

  • Использование существующих методов использования ресурсов: Stream Тип часто используется в других платформах или технологиях для передачи данных или объектов по границам приложений или в подобных ситуациях.Using existing resource techniques: The Stream type is used frequently in other frameworks or technologies for transferring data or objects across application boundaries or for similar situations. Затем можно использовать Stream методы для хранения или получения данных в формате XAML, которые в конечном итоге будут использоваться для создания объекта в составе приложения.You can then use the Stream techniques to store or obtain XAML-formatted data that you eventually use to create an object as part of your application.

  • Фиксированные документы: Приложение может загружать локальные или загруженные документы XPS для включения в дерево объектов приложения WPF и пользовательский интерфейс.Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

Примечание

В этой документации иногда описывается граф объектов, а не дерево объектов.This documentation sometimes describes an object graph, as opposed to an object tree. В отношении объектов времени выполнения приложения WPF времени выполнения не всегда существует иерархическая связь типа «родители-потомки», поэтому граф объектов — это более широко применяемая терминология.A strict parent-child relationship does not always exist in the run time object relationships of a run time WPF application, so an object graph is a more widely applicable terminology. Однако, поскольку WPF также включает два различных API-интерфейса для концептуального VisualTreeHelperдерева (LogicalTreeHelper,), метафора дерева по-прежнему применима к большинству реальных случаев в WPF.However, because WPF also includes two different tree conceptualization APIs (LogicalTreeHelper, VisualTreeHelper) the tree metaphor still applies adequately to most real-world cases in WPF. С точки зрения языка XAML, граф объектов часто является лучшим способом подумать о том, как объекты создаются из XAML, поскольку сам язык XAML не обязательно указывает методологии вспомогательного класса, которые предоставляют отношения более в снова древовидная структура.From the XAML language perspective however, the object graph is often the best way to think about how objects are created out of XAML, because the XAML language itself does not necessarily specify helper class methodologies that bring the relationships more into a tree structure again.

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

XAML — это язык разметки, непосредственно представляющий создание и выполнение объекта.XAML is a markup language that directly represents object instantiation and execution. Таким образом, элементы, созданные в XAML, имеют такие же возможности взаимодействия с системными ресурсами (например, сетевой доступ и операции ввода-вывода файловой системы), как и эквивалентный созданный код.Therefore, elements created in XAML have the same ability to interact with system resources (network access, file system IO, for example) as the equivalent generated code does.

WPFWPFподдерживает платформу .NET.NET CAS (Code Access Security — безопасность доступа кода)Code Access Security (CAS)безопасности.supports the .NET.NET security framework CAS (Code Access Security — безопасность доступа кода)Code Access Security (CAS). Это означает, что содержимое WPFWPF, работающее в зоне Интернет, сократило разрешения исполнения.This means that WPFWPF content running in the internet zone has reduced execution permissions. "Свободный XAML" (страницы некомпилированного XAML, интерпретируемые во время загрузки средства просмотра XAML) и Приложение обозревателя XAML (XBAP)XAML browser application (XBAP) обычно выполняются в этой Интернет-зоне и используют один набор разрешений."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and Приложение обозревателя XAML (XBAP)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. Однако XAML, загруженный в полностью доверенное приложение, имеет такой же доступ к системным ресурсам, как ведущее приложение.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. Дополнительные сведения см. в разделе Безопасность частичного доверия в WPF.For more information, see WPF Partial Trust Security.

Влияние этих инструкций на XamlReader то, что проект приложения должен принимать решения о доверии XAML, который вы решили загрузить.The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. Если вы загружаете код XAML, который не является доверенным, рассмотрите возможность реализации собственного метода "песочницы" для загрузки результирующего графа объекта.If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReaderтакже может вызываться частично доверенным кодом.XamlReader can also be called by partial trust code. В этом случае зона безопасности Интернета применяется для управления доступом для кода.In this case, Internet security zone is applied for code access security. Если в зоне безопасности Интернета все данные в загруженном коде XAML недопустимы, возникает исключение синтаксического анализа XAML.If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. В XBAP и других случаях с частичным доверием на уровне платформы, где XamlReader является частью выполнения, возникает то же поведение исключения, что и при явном вызове частичного доверия.Under XBAP and other cases that are partial trust at the platform level, where XamlReader is part of the execution, you get the same exception behavior as with explicit partial trust calls.

XAML WPF, средства чтения и записи XAML и управление версиями на языке XAMLWPF XAML, XAML Readers/Writers, and XAML Language Versioning

XAML2009 включает такие языковые функции, как x:Reference и x:FactoryMethod.XAML2009 includes language features such as x:Reference and x:FactoryMethod. Для загрузки XAML, использующего Parse эти функции, можно использовать сигнатуры Load или.You can use signatures of Load or Parse to load XAML that uses these features. Однако эти функции языка не поддерживаются для XAML, который должен быть скомпилирован в виде разметки (например, XAML для действия сборки страницы в приложении WPF или любого XAML, включающего в себя задачу компиляции разметки в действиях сборки).However, those language features are not supported for XAML that needs to be markup compiled (such as XAML for the Page build action in a WPF application, or any XAML that involves the markup compile task in the build actions).

Типы WPF и технология WPF в общих понятиях поддержки, основанных на доступе к внутренним компонентам WPF.WPF types and the WPF technology in general support concepts that rely on access to WPF internals. Например, как WPF реализует свойства зависимостей, полагается на внутренние методы для эффективного уточняющего запроса типа-члена.For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. Доступ к этим внутренним компонентам осуществляется с помощью API-интерфейсов чтения и XamlWriter записи XamlReader XAML, System.Windows.Markup предоставляемых в и из пространства имен и сборки PresentationFramework.Access to these internals is enabled by the XAML reading and writing APIs provided in XamlWriter and XamlReader from the System.Windows.Markup namespace and PresentationFramework assembly. Однако средства чтения и записи XAML нижнего уровня из сборки System. XAML (классы, System.Xaml.XamlReader System.Xaml.XamlWriterоснованные на) не имеют доступа к внутренним компонентам WPF.However, the lower-level XAML readers and XAML writers from the System.Xaml assembly (classes based on System.Xaml.XamlReader, System.Xaml.XamlWriter) do not have access to the WPF internals. Нет зависимости от System. XAML к какой-либо сборке, относящейся к WPF.There is no dependency from System.Xaml to any WPF-specific assembly. Без доступа к внутренним компонентам WPF средства чтения и записи System. XAML не могут правильно загружать или сохранять все типы WPF или типы, основанные на типах WPF.Without access to the WPF internals, System.Xaml readers and writers cannot correctly load or save all WPF types, or types based on WPF types. В частности, средства чтения и записи System. XAML не понимают таких концепций, как хранилище свойств зависимостей WPF, или все особенности того, как WPF использует стили, словари ресурсов и шаблоны.In particular, the System.Xaml readers and writers do not understand concepts such as the WPF dependency property backing property store, or all the specifics of how WPF uses styles, resource dictionaries and templates. Поэтому у вас есть возможность сделать следующее:Therefore you have a choice to make:

  • Если вы загружаете типы WPF и (или) используете XAML в форме BAML, используйте средства чтения и записи XAML PresentationFramework.If you are loading WPF types, and/or you are using XAML in BAML form in any way, use the PresentationFramework XAML readers and XAML writers.

  • Если вы не полагаетесь на типы WPF или форму BAML XAML, а также не используете другую конкретную технологию чтения XAML или реализацию модуля записи XAML по причинам, относящимся к этой платформе, используйте средства чтения и записи XAML System. XAML.If you are not relying on any WPF types or the BAML form of XAML, and are not using another specific technology's XAML reader or XAML writer implementation for reasons that are specific to that framework, use the System.Xaml XAML readers and XAML writers.

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

XamlReader— это вызываемая поверхность API для средства синтаксического анализа XAML на уровне платформы WPF.XamlReader is the callable API surface for the WPF framework-level XAML parser. То же самое базовое средство синтаксического анализа XAML также выполняет загрузку и синтаксический анализ XAML во время выполнения для .NET Framework 3.0.NET Framework 3.0 приложений .NET Framework 3,5.NET Framework 3.5WPF, предназначенных для и.The same underlying XAML parser also performs the run-time XAML loading and parsing for WPF applications that target .NET Framework 3.0.NET Framework 3.0 and .NET Framework 3,5.NET Framework 3.5.

Если целевой платформой .NET Framework 4.NET Framework 4является, внешний API будет одинаковым, но части реализации основаны .NET Framework 4.NET Framework 4 на общей реализации XAML в сборке System. XAML, что улучшает многие технические и отчетные аспекты синтаксического анализа XAML.If you are targeting .NET Framework 4.NET Framework 4, the external API is the same, but parts of the implementation are built on the .NET Framework 4.NET Framework 4 general XAML implementation in the System.Xaml assembly, which improves many of the technical and reporting aspects of parsing XAML. Нацеливание .NET Framework 4.NET Framework 4 обязательно включает в себя System. XAML как ссылку, а подробные сведения о реализации, например о возникших исключениях, могут поступать из определенных типов System. XAML.Targeting .NET Framework 4.NET Framework 4 necessarily entails including System.Xaml as a reference, and details of implementation such as the exceptions reported may come from System.Xaml defined types.

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

XamlReader()

Инициализирует новый экземпляр класса XamlReader.Initializes a new instance of the XamlReader class.

Методы

CancelAsync()

Прерывает текущую операцию асинхронной загрузки, если имеется отложенная асинхронная операция загрузки.Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

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

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

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

Возвращает объект XamlSchemaContext, который представляет параметры схемы контекста WPF для класса XamlReader.Returns a XamlSchemaContext object that represents the WPF schema context settings for a XamlReader.

Load(Stream)

Считывает входные данные XAML в указанном пространстве имен Stream и возвращает корневой объект Object соответствующего дерева объектов.Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

Load(Stream, ParserContext)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

Load(XamlReader)

Считывает входные данные XAML через предоставленный класс XamlReader и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader)

Считывает входные данные XAML в указанном классе XmlReader и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

LoadAsync(Stream)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext)

Считывает входные данные XAML в указанном классе Stream и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(XmlReader)

Считывает входные данные XAML в указанном классе XmlReader и возвращает корневой объект соответствующего дерева объектов.Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Считывает входные данные XAML в указанной текстовой строке и возвращает объект, соответствующий корню указанной разметки.Reads the XAML input in the specified text string and returns an object that corresponds to the root of the specified markup.

Parse(String, ParserContext)

Считывает разметку XAML в указанной текстовой строке (используя указанный класс ParserContext) и возвращает объект, соответствующий корню указанной разметки.Reads the XAML markup in the specified text string (using a specified ParserContext) and returns an object that corresponds to the root of the specified markup.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

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

События

LoadCompleted

Происходит по завершении операции асинхронной загрузки.Occurs when an asynchronous load operation completes.

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

Дополнительно