XamlReader Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado.
public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
- Herencia
-
XamlReader
Ejemplos
En el ejemplo siguiente se convierte un Button elemento en una cadena mediante la XamlWriter clase . A continuación, la cadena se vuelve a cargar en un Button mediante el método estático Load de la XamlReader clase .
// 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 métodos sincrónicos Load son estáticos, pero los métodos asincrónicos LoadAsync no son estáticos y requieren una instancia de la XamlReader clase que se va a usar.
La salida de los Load métodos es un único objeto, que representa el objeto raíz de un árbol de objetos creado o un gráfico de objetos. Los gráficos de objetos creados por XamlReader se agregan normalmente al árbol de objetos existente de una aplicación WPF en tiempo de ejecución. De lo contrario, el nuevo gráfico de objetos se considera desconectado con fines del modelo de aplicación wpF. Esto significa que no se representa y no se puede tener acceso mediante ninguna de las técnicas de árbol de objetos tal como se aplica al árbol de objetos principal de la aplicación WPF (por ejemplo, las API FindName, LogicalTreeHelper, VisualTreeHelper). Para obtener más información sobre los conceptos del árbol de objetos, vea Árboles en WPF.
XamlReader admite los siguientes escenarios principales:
Factoría de clonación y objetos: sin mecanismos adicionales, un tipo de referencia generalmente no se puede incluir en más de una posición en un árbol de objetos WPF. (Algunos ejemplos de mecanismos adicionales que ofrecen compatibilidad para compartir o volver a usar en WPF incluyen objetos basados en Freezable, o compatibilidad con objetos que se pueden compartir habitualmente, como Brush los que se hacen referencia como un elemento de . ResourceDictionary) Una manera de clonar un objeto que ya está en el árbol de objetos es serializar el objeto mediante XamlWriter.Save. A continuación, use la cadena serializada como entrada para una llamada a Load, con una secuencia o XmlReader como intermediario.
Construcción de objetos basados en información Just-In-Time: a menudo hay otras maneras de hacer que el enlace en tiempo de ejecución o la entrada proporcionada por el usuario cambien el estado de los objetos existentes. Por ejemplo, podría usar el mismo valor para establecer más de una propiedad o usar el enlace de datos. Pero si tiene un escenario en el que incluso el tipo de objeto que se va a crear solo se determina en tiempo de ejecución o con la interacción del usuario, la creación de este objeto mediante la creación de una cadena para Load la entrada suele ser una técnica útil.
Uso de 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. A continuación, puedes usar las Stream técnicas para almacenar u obtener datos con formato XAML que finalmente usas para crear un objeto como parte de la aplicación.
Documentos corregidos: La aplicación puede cargar documentos XPS locales o descargados para su inclusión en un árbol de objetos de aplicación de WPF y una interfaz de usuario.
Nota:
En esta documentación se describe a veces un gráfico de objetos, en lugar de un árbol de objetos. Una relación estricta de elementos primarios y secundarios no siempre existe en las relaciones de objeto en tiempo de ejecución de una aplicación WPF en tiempo de ejecución, por lo que un gráfico de objetos es una terminología más aplicable. Sin embargo, dado que WPF también incluye dos API de conceptualización de árboles diferentes (LogicalTreeHelper, VisualTreeHelper), la metáfora de árbol todavía se aplica adecuadamente a la mayoría de los casos reales en 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, ya que el propio lenguaje XAML no especifica necesariamente metodologías de clase auxiliar que vuelven a incorporar las relaciones a una estructura de árbol.
Seguridad de acceso a código, XAML flexible y XamlReader
XAML es un lenguaje de marcado que representa directamente la creación de instancias y la ejecución de objetos. Por lo tanto, los elementos creados en XAML tienen la misma capacidad de interactuar con los recursos del sistema (acceso a la red, E/S del sistema de archivos, por ejemplo) que el código generado equivalente.
WPF admite la seguridad de acceso al código (CAS) del marco de seguridad de .NET. Esto significa que el contenido de WPF que se ejecuta en la zona de Internet ha reducido los permisos de ejecución. "XAML flexible" (páginas de XAML no compiladas interpretadas en tiempo de carga por un visor XAML) y la aplicación de explorador XAML (XBAP) normalmente se ejecutan en esta zona de Internet y usan el mismo conjunto de permisos. Sin embargo, XAML cargado en en una aplicación de plena confianza tiene el mismo acceso a los recursos del sistema que la aplicación de hospedaje. Para obtener más información, vea Seguridad de confianza parcial de WPF.
Las implicaciones de estas instrucciones para XamlReader es que el diseño de la aplicación debe tomar decisiones de confianza sobre el XAML que decide cargar. Si estás cargando XAML que no es de confianza, considera la posibilidad de implementar tu propia técnica de espacio aislado para cargar el gráfico de objetos resultante.
XamlReader también se puede llamar mediante código de confianza parcial. En este caso, se aplica la zona de seguridad de Internet para la seguridad de acceso al código. Si algo del XAML cargado no es válido en la zona de seguridad de Internet, se produce una excepción de análisis XAML. En XBAP y otros casos que son confianza parcial en el nivel de plataforma, donde XamlReader forma parte de la ejecución, obtendrá el mismo comportamiento de excepción que con llamadas de confianza parcial explícitas.
Control de versiones de lenguaje XAML, lectores y escritores XAML de WPF y lenguaje XAML
XAML2009 incluye características de lenguaje como x:Reference y x:FactoryMethod. Puedes usar firmas de Load o Parse para cargar XAML que use estas características. Sin embargo, esas características de lenguaje no son compatibles con XAML que deben compilarse con marcado (como XAML para la acción de compilación de página en una aplicación WPF o cualquier XAML que implique la tarea de compilación de marcado en las acciones de compilación).
Tipos de WPF y la tecnología WPF en conceptos generales de soporte técnico que dependen del acceso a los elementos internos de WPF. Por ejemplo, la forma en que WPF implementa propiedades de dependencia se basa en técnicas internas para una búsqueda eficaz de miembros de tipo. El acceso a estos elementos internos está habilitado por las API de lectura y escritura de XAML proporcionadas en XamlWriter y XamlReader desde el espacio de nombres y el System.Windows.Markup ensamblado PresentationFramework. Sin embargo, los lectores XAML de nivel inferior y los escritores XAML del ensamblado System.Xaml (clases basadas en System.Xaml.XamlReader, System.Xaml.XamlWriter) no tienen acceso a los elementos internos de WPF. No hay ninguna dependencia de System.Xaml a ningún ensamblado específico de WPF. Sin acceso a los elementos internos de WPF, los lectores y escritores de System.Xaml no pueden cargar ni guardar correctamente todos los tipos de WPF, ni los tipos basados en tipos de WPF. En concreto, los lectores y escritores System.Xaml no comprenden conceptos como el almacén de propiedades de respaldo de propiedades de dependencia de WPF, o todos los detalles de cómo WPF usa estilos, diccionarios de recursos y plantillas. Por lo tanto, tiene la opción de hacer lo siguiente:
Si estás cargando tipos de WPF o usas XAML en forma BAML de cualquier manera, usa los lectores XAML presentationFramework y los escritores XAML.
Si no confías en ningún tipo de WPF ni en la forma BAML de XAML, y no usas la implementación de lector XAML o escritor XAML de otra tecnología específica por motivos específicos de ese marco, usa los lectores XAML System.Xaml y los escritores XAML.
Implementación de respaldo de System.Xaml en .NET 4
XamlReader es la superficie de API invocable para el analizador XAML de nivel de marco de WPF. El mismo analizador XAML subyacente también realiza la carga y el análisis de XAML en tiempo de ejecución para aplicaciones WPF destinadas a .NET Framework 3.0 y .NET Framework 3.5.
Si tiene como destino .NET Framework 4, la API externa es la misma, pero las partes de la implementación se basan en la implementación de XAML general de .NET Framework 4 en el ensamblado System.Xaml, lo que mejora muchos de los aspectos técnicos e informativos del análisis de XAML. El destino de .NET Framework 4 implica necesariamente incluir System.Xaml como referencia y los detalles de la implementación, como las excepciones notificadas, pueden provenir de tipos definidos por System.Xaml.
Constructores
| Nombre | Description |
|---|---|
| XamlReader() |
Inicializa una nueva instancia de la clase XamlReader. |
Métodos
| Nombre | Description |
|---|---|
| CancelAsync() |
Anula la operación de carga asincrónica actual, si hay una operación de carga asincrónica pendiente. |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| GetWpfSchemaContext() |
Devuelve un XamlSchemaContext objeto que representa la configuración de contexto de esquema de WPF para .XamlReader |
| Load(Stream, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| Load(Stream, ParserContext, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| Load(Stream, ParserContext) |
Lee la entrada XAML en el especificado Stream y devuelve un objeto que es la raíz del árbol de objetos correspondiente. |
| Load(Stream) |
Lee la entrada XAML en el especificado Stream y devuelve un que Object es la raíz del árbol de objetos correspondiente. |
| Load(XamlReader) |
Lee la entrada XAML a través de un proporcionado XamlReader y devuelve un objeto que es la raíz del árbol de objetos correspondiente. |
| Load(XmlReader, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| Load(XmlReader) |
Lee la entrada XAML en el especificado XmlReader y devuelve un objeto que es la raíz del árbol de objetos correspondiente. |
| LoadAsync(Stream, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| LoadAsync(Stream, ParserContext, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| LoadAsync(Stream, ParserContext) |
Lee la entrada XAML en el especificado Stream y devuelve la raíz del árbol de objetos correspondiente. |
| LoadAsync(Stream) |
Lee la entrada XAML en el especificado Stream y devuelve la raíz del árbol de objetos correspondiente. |
| LoadAsync(XmlReader, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| LoadAsync(XmlReader) |
Lee la entrada XAML en el especificado XmlReader y devuelve la raíz del árbol de objetos correspondiente. |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| Parse(String, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| Parse(String, ParserContext, Boolean) |
Lee la entrada XAML y crea un gráfico de objetos mediante el lector XAML predeterminado de WPF y un escritor de objetos XAML asociado. |
| Parse(String, ParserContext) |
Lee el marcado XAML en la cadena de texto especificada (mediante un especificado ParserContext) y devuelve un objeto que corresponde a la raíz del marcado especificado. |
| Parse(String) |
Lee la entrada XAML en la cadena de texto especificada y devuelve un objeto que corresponde a la raíz del marcado especificado. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Eventos
| Nombre | Description |
|---|---|
| LoadCompleted |
Se produce cuando se completa una operación de carga asincrónica. |