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 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.
public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
- Herencia
-
XamlReader
Ejemplos
En el ejemplo siguiente se convierte en Button 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 en 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 o un gráfico de objetos creados. 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 que se aplican 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 de árbol de objetos, vea Árboles en WPF.
XamlReader admite los siguientes escenarios principales:
Clonación/generador de 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 normalmente, como Brush los a los que se hace 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 cambie 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 es determinable 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 y una interfaz de usuario de WPF.
Nota
Esta documentación a veces describe 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 objetos 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 árbol diferentes (LogicalTreeHelper, VisualTreeHelper), la metáfora de árbol se sigue 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 a partir de XAML, ya que el propio lenguaje XAML no especifica necesariamente metodologías de clase auxiliares que vuelven a incorporar las relaciones a una estructura de árbol.
Seguridad de acceso de 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 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.
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 tiene permisos de ejecución reducidos. "XAML flexible" (las páginas de XAML no compiladas interpretados en tiempo de carga por un visor XAML) y la aplicación de explorador XAML (XBAP) se suelen ejecutar en esta zona de Internet y usan el mismo conjunto de permisos. Pero el código XAML que se carga 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 decida cargar. Si va a cargar 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.
XamlReader también se puede llamar mediante código de confianza parcial. En este caso, la zona de seguridad de Internet se aplica a la seguridad de acceso al código. Si algo en el 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 de confianza parcial en el nivel de plataforma, donde XamlReader forma parte de la ejecución, se obtiene 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
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áginas en una aplicación WPF, o cualquier XAML que implique la tarea de compilación de marcado en las acciones de compilación).
Los tipos de WPF y la tecnología WPF en general admiten conceptos que se basan en el acceso a los elementos internos de WPF. Por ejemplo, cómo 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 de 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 estás usando 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 o 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 para 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
XamlReader() |
Inicializa una nueva instancia de la clase XamlReader. |
Métodos
CancelAsync() |
Anula la operación de carga asincrónica actual si hay alguna pendiente. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
GetWpfSchemaContext() |
Devuelve un objeto XamlSchemaContext que representa el valor de contexto de esquema de WPF para XamlReader. |
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. |
Load(Stream, Boolean) |
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. |
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. |
Load(Stream, ParserContext, Boolean) |
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. |
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. |
Load(XmlReader) |
Lee la entrada XAML del objeto XmlReader especificado y devuelve un objeto que es la raíz del árbol de objetos correspondiente. |
Load(XmlReader, Boolean) |
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. |
LoadAsync(Stream) |
Lee la entrada XAML del objeto Stream especificado y devuelve la raíz del árbol de objetos correspondiente. |
LoadAsync(Stream, Boolean) |
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. |
LoadAsync(Stream, ParserContext) |
Lee la entrada XAML del objeto Stream especificado y devuelve la raíz del árbol de objetos correspondiente. |
LoadAsync(Stream, ParserContext, Boolean) |
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. |
LoadAsync(XmlReader) |
Lee la entrada XAML del objeto XmlReader especificado y devuelve la raíz del árbol de objetos correspondiente. |
LoadAsync(XmlReader, Boolean) |
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. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
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. |
Parse(String, Boolean) |
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. |
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. |
Parse(String, ParserContext, Boolean) |
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. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Eventos
LoadCompleted |
Se produce cuando se completa una operación de carga asincrónica. |