XamlReader XamlReader XamlReader XamlReader Class

Definición

Lee datos de entrada XAML y crea un gráfico de objetos usando el lector XAML predeterminado de WPF y un sistema de escritura de objetos XAML asociado.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
Herencia
XamlReaderXamlReaderXamlReaderXamlReader

Ejemplos

En el ejemplo siguiente se convierte Button un en una cadena mediante XamlWriter la clase.The following example converts a Button into a string using the XamlWriter class. A continuación, la cadena se vuelve a Button cargar en un Load mediante el método XamlReader estático en la clase.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)

Comentarios

Los Load métodos sincrónicos son estáticos, pero los LoadAsync métodos asincrónicos no son estáticos y requieren una XamlReader instancia de la clase que se va a usar.The synchronous Load methods are static, but the asynchronous LoadAsync methods are not static and require an instance of the XamlReader class to use.

La salida de los Load métodos es un objeto único, que representa el objeto raíz de un gráfico de objetos o árbol de objetos creado.The output of the Load methods is a single object, which represents the root object of a created object tree or object graph. Los gráficos de objetos creados por XamlReader se suelen agregar al árbol de objetos existente de una aplicación WPF en tiempo de ejecución.Object graphs that are created by XamlReader are typically added to the existing object tree of a WPF application at run time. En caso contrario, se considera que el nuevo gráfico de objetos está desconectado para los fines del modelo de aplicación de WPF.Otherwise the new object graph is considered disconnected for purposes of the WPF application model. Esto significa que no se representa y a la que no se puede tener acceso mediante cualquiera de las técnicas de árbol de objetos aplicadas al árbol de objetos principal de la aplicación WPF ( FindNamepor LogicalTreeHelperejemplo VisualTreeHelper, las API,,).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). Para obtener más información sobre los conceptos del árbol de objetos, vea árboles en WPF.For more information on object tree concepts, see Trees in WPF.

XamlReaderadmite los siguientes escenarios principales:XamlReader supports the following primary scenarios:

  • Clonación/generador de objetos: Sin mecanismos adicionales, por lo general no se puede incluir un tipo de referencia en más de una posición en un árbol de objetos de WPF.Cloning/object factory: Without additional mechanisms, a reference type generally cannot be included in more than one position in a WPF object tree. (Ejemplos de mecanismos adicionales que ofrecen compatibilidad para compartir o volver a usar en WPF incluyen objetos basados en Freezable, o compatibilidad con objetos Brush que se pueden compartir normalmente, como los que se hacen referencia como un elemento de ResourceDictionaryun.) Una manera de clonar un objeto que ya está en el árbol de objetos es serializar el XamlWriter.Saveobjeto mediante.(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. A continuación, se usa la cadena serializada como entrada para una Loadllamada a, con una XmlReader secuencia o como intermediario.You then use the serialized string as input for a call to Load, with a stream or XmlReader as an intermediary.

  • Construir objetos basados en información Just-in-Time: A menudo hay otras maneras de realizar el enlace en tiempo de ejecución o la entrada proporcionada por el usuario cambiar el estado de los objetos existentes.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. Por ejemplo, podría utilizar el mismo valor para establecer más de una propiedad o usar el enlace de datos.For example you could use the same value to set more than one property, or use data binding. Pero si tiene un escenario en el que incluso el tipo de objeto que se va a crear solo se puede determinar en tiempo de ejecución o con la interacción del usuario, la creación de dicho Load objeto mediante la creación de una cadena para la entrada suele ser una técnica útil.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.

  • Uso de las técnicas de recursos existentes: El Stream tipo se usa con frecuencia en otros marcos o tecnologías para transferir datos u objetos a través de los límites de la aplicación o para situaciones similares.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. Después, puede usar las Stream técnicas para almacenar u obtener los datos con formato XAML que se usan para crear un objeto como parte de la aplicación.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.

  • Documentos fijos: La aplicación podría cargar documentos XPS locales o descargados para incluirlos en una interfaz de usuario y un árbol de objetos de aplicación WPF.Fixed documents: Your application might load local or downloaded XPS documents for inclusion in a WPF application object tree and UI.

Nota

En algunas ocasiones, en esta documentación se describe un gráfico de objetos, en lugar de un árbol de objetos.This documentation sometimes describes an object graph, as opposed to an object tree. Una relación de elementos primarios y secundarios no siempre existe en las relaciones de objeto en tiempo de ejecución de una aplicación de WPF en tiempo de ejecución, por lo que un gráfico de objetos es una terminología más aplicable.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. Sin embargo, dado que WPF también incluye dos API conceptualización deLogicalTreeHelperárbol VisualTreeHelperdiferentes (,), la metáfora de árbol se sigue aplicando correctamente a la mayoría de los casos reales en 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. Sin embargo, desde la perspectiva del lenguaje XAML, el gráfico de objetos suele ser la mejor manera de pensar en cómo se crean los objetos fuera de XAML, porque el propio lenguaje XAML no especifica necesariamente metodologías de clase de aplicación auxiliar que reúnen las relaciones en un estructura de árbol de nuevo.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.

Seguridad de acceso del código, XAML dinámico y XamlReaderCode Access Security, Loose XAML, and XamlReader

XAML es un lenguaje de marcado que representa directamente la creación de instancias y la ejecución de objetos.XAML is a markup language that directly represents object instantiation and execution. Por consiguiente, los elementos creados en código XAML tienen la misma capacidad de interactuar con los recursos del sistema (por ejemplo, el acceso a la red y la E/S del sistema de archivos) que el código generado equivalente.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.

WPFWPFadmite el .NET.NET marco Seguridad de acceso del código (CAS)Code Access Security (CAS)de seguridad.supports the .NET.NET security framework Seguridad de acceso del código (CAS)Code Access Security (CAS). Esto significa que el contenido de WPFWPF que se ejecuta en la zona de Internet tiene permisos de ejecución reducidos.This means that WPFWPF content running in the internet zone has reduced execution permissions. "XAML dinámico" (páginas de código XAML no compilado que un visor XAML interpreta en el momento de Aplicación del explorador XAML (XBAP)XAML browser application (XBAP) la carga) y que normalmente se ejecutan en esta zona de Internet y usan el mismo conjunto de permisos."Loose XAML" (pages of noncompiled XAML interpreted at load time by a XAML viewer) and Aplicación del explorador XAML (XBAP)XAML browser application (XBAP) are usually run in this internet zone and use the same permission set. Sin embargo, el código XAML cargado en una aplicación de plena confianza tiene el mismo acceso a los recursos del sistema que la aplicación de hospedaje.However, XAML loaded in to a fully trusted application has the same access to the system resources as the hosting application does. Para obtener más información, vea Seguridad de confianza parcial de WPF.For more information, see WPF Partial Trust Security.

Las implicaciones de estas instrucciones para XamlReader son que el diseño de la aplicación debe tomar decisiones de confianza sobre el XAML que decida cargar.The implications of these statements for XamlReader is that your application design must make trust decisions about the XAML you decide to load. Si está cargando XAML que no es de confianza, considere la posibilidad de implementar su propia técnica de espacio aislado para cargar el gráfico de objetos resultante.If you are loading XAML that is not trusted, consider implementing your own sandboxing technique for how you load the resulting object graph.

XamlReadertambién se puede llamar mediante código de confianza parcial.XamlReader can also be called by partial trust code. En este caso, se aplica la zona de seguridad de Internet para la seguridad de acceso del código.In this case, Internet security zone is applied for code access security. Si algo del código XAML cargado no es válido en la zona de seguridad de Internet, se produce una excepción de análisis de XAML.If anything in the loaded XAML is invalid under Internet security zone, a XAML parse exception is thrown. En XBAP y otros casos que son de confianza parcial en el nivel de plataforma XamlReader , donde forma parte de la ejecución, se obtiene el mismo comportamiento de excepción que con las llamadas explícitas de confianza parcial.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 de WPF, lectores/escritores de XAML y control de versiones del lenguaje XAMLWPF XAML, XAML Readers/Writers, and XAML Language Versioning

XAML2009 incluye características de lenguaje como x:Reference y x:FactoryMethod.XAML2009 includes language features such as x:Reference and x:FactoryMethod. Puede usar firmas de Load o Parse para cargar XAML que utiliza estas características.You can use signatures of Load or Parse to load XAML that uses these features. Sin embargo, esas características de lenguaje no se admiten para XAML que necesita ser marcado compilado (como XAML para la acción de compilación de páginas en una aplicación WPF o cualquier XAML que implique la tarea de compilación de marcado en las acciones de compilación).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).

Los tipos de WPF y la tecnología de WPF en los conceptos de compatibilidad generales que se basan en el acceso a los elementos internos de WPF.WPF types and the WPF technology in general support concepts that rely on access to WPF internals. Por ejemplo, el modo en que WPF implementa las propiedades de dependencia se basa en técnicas internas para una búsqueda eficaz de miembros de tipo.For instance, how WPF implements dependency properties relies on internal techniques for efficient type-member lookup. El acceso a estos elementos internos está habilitado por las API de lectura y XamlWriter escritura XamlReader de XAML System.Windows.Markup que se proporcionan en y desde el espacio de nombres y el ensamblado 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. Sin embargo, los lectores XAML y los escritores de XAML de nivel inferior del ensamblado System. XAML ( System.Xaml.XamlReaderclases System.Xaml.XamlWriterbasadas en) no tienen acceso a los elementos internos de 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. No hay ninguna dependencia entre System. XAML y cualquier ensamblado específico de WPF.There is no dependency from System.Xaml to any WPF-specific assembly. Sin acceso a los elementos internos de WPF, los lectores y escritores de System. XAML no pueden cargar o guardar correctamente todos los tipos de WPF o tipos basados en tipos de 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. En concreto, los lectores y escritores de System. XAML no entienden conceptos como el almacén de propiedades de respaldo de la propiedad de dependencia de WPF, o todos los detalles de cómo usa WPF los estilos, los diccionarios de recursos y las plantillas.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. Por lo tanto, tiene la opción de hacer lo siguiente:Therefore you have a choice to make:

  • Si está cargando tipos de WPF y/o usa XAML en forma de BAML de cualquier modo, use los lectores XAML y escritores de 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.

  • Si no se basa en ningún tipo de WPF o en la forma BAML de XAML, y no usa la implementación del sistema de escritura XAML o el lector XAML de la tecnología específica para los motivos específicos de ese marco, use los lectores XAML y escritores de XAML de 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.

Implementación de respaldo de System. XAML en .NET 4System.Xaml Backing Implementation in .NET 4

XamlReaderes la superficie de API a la que se puede llamar para el analizador XAML de nivel de marco de WPF.XamlReader is the callable API surface for the WPF framework-level XAML parser. El mismo analizador de XAML subyacente también realiza la carga y el análisis de XAML en tiempo de ejecución para .NET Framework 3.0.NET Framework 3.0 las .NET Framework 3,5.NET Framework 3.5aplicaciones de WPF que tienen como destino y.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.

Si tiene como destino .NET Framework 4.NET Framework 4, la API externa es la misma, pero las partes de la implementación se basan en la .NET Framework 4.NET Framework 4 implementación de XAML general en el ensamblado System. XAML, lo que mejora muchos de los aspectos técnicos e informes del análisis de 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. La destinación .NET Framework 4.NET Framework 4 necesariamente implica incluir System. XAML como referencia y los detalles de la implementación, como las excepciones indicadas, pueden proviene de tipos definidos por 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.

Constructores

XamlReader() XamlReader() XamlReader() XamlReader()

Inicializa una nueva instancia de la clase XamlReader.Initializes a new instance of the XamlReader class.

Métodos

CancelAsync() CancelAsync() CancelAsync() CancelAsync()

Anula la operación de carga asincrónica actual si hay alguna pendiente.Aborts the current asynchronous load operation, if there is an asynchronous load operation pending.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
GetWpfSchemaContext() GetWpfSchemaContext() GetWpfSchemaContext() GetWpfSchemaContext()

Devuelve un objeto XamlSchemaContext que representa el valor de contexto de esquema de WPF para XamlReader.Returns a XamlSchemaContext object that represents the WPF schema context settings for a XamlReader.

Load(Stream) Load(Stream) Load(Stream) Load(Stream)

Lee la entrada XAML del objeto Stream especificado y devuelve un objeto Object que es la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified Stream and returns an Object that is the root of the corresponding object tree.

Load(Stream, ParserContext) Load(Stream, ParserContext) Load(Stream, ParserContext) Load(Stream, ParserContext)

Lee la entrada XAML del objeto Stream especificado y devuelve un objeto que es la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified Stream and returns an object that is the root of the corresponding object tree.

Load(XamlReader) Load(XamlReader) Load(XamlReader) Load(XamlReader)

Lee la entrada XAML a través del objeto XamlReader especificado y devuelve un objeto que es la raíz del árbol de objetos correspondiente.Reads the XAML input through a provided XamlReader and returns an object that is the root of the corresponding object tree.

Load(XmlReader) Load(XmlReader) Load(XmlReader) Load(XmlReader)

Lee la entrada XAML del objeto XmlReader especificado y devuelve un objeto que es la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified XmlReader and returns an object that is the root of the corresponding object tree.

LoadAsync(Stream) LoadAsync(Stream) LoadAsync(Stream) LoadAsync(Stream)

Lee la entrada XAML del objeto Stream especificado y devuelve la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(Stream, ParserContext) LoadAsync(Stream, ParserContext) LoadAsync(Stream, ParserContext) LoadAsync(Stream, ParserContext)

Lee la entrada XAML del objeto Stream especificado y devuelve la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified Stream and returns the root of the corresponding object tree.

LoadAsync(XmlReader) LoadAsync(XmlReader) LoadAsync(XmlReader) LoadAsync(XmlReader)

Lee la entrada XAML del objeto XmlReader especificado y devuelve la raíz del árbol de objetos correspondiente.Reads the XAML input in the specified XmlReader and returns the root of the corresponding object tree.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
Parse(String) Parse(String) Parse(String) Parse(String)

Lee la entrada XAML de la cadena de texto especificada y devuelve un objeto que corresponde a la raíz del marcado especificado.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) Parse(String, ParserContext) Parse(String, ParserContext) Parse(String, ParserContext)

Lee el marcado XAML de la cadena de texto especificada (usando el contexto ParserContext especificado) y devuelve un objeto que corresponde a la raíz del marcado especificado.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() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Eventos

LoadCompleted LoadCompleted LoadCompleted LoadCompleted

Se produce cuando se completa una operación de carga asincrónica.Occurs when an asynchronous load operation completes.

Se aplica a

Consulte también: