Servicios XAML
En este tema se describen las funcionalidades de un conjunto de tecnología conocido como servicios XAML de .NET. La mayoría de los servicios y API descritos se encuentran en el ensamblado System.Xaml
. Los servicios incluyen lectores y escritores, clases de esquema y compatibilidad con esquemas, factorías, asignación de clases, compatibilidad intrínseca del lenguaje XAML y otras características del lenguaje XAML.
Acerca de esta documentación
La documentación conceptual de los servicios XAML de .NET supone que tiene experiencia anterior con el lenguaje XAML y cómo se puede aplicar a un marco específico, por ejemplo, Windows Presentation Foundation (WPF) o Windows Workflow Foundation, o un área de características de tecnología específica, por ejemplo, las características de personalización de compilación en Microsoft.Build.Framework.XamlTypes. Esta documentación no intenta explicar los conceptos básicos de XAML como lenguaje de marcado, terminología de sintaxis XAML u otro material introductorio. En su lugar, esta documentación se centra en usar específicamente los servicios XAML de .NET que están habilitados en la biblioteca de ensamblados System.Xaml. La mayoría de estas API son para escenarios de integración y extensibilidad del lenguaje XAML. Esto puede incluir cualquiera de los siguientes escenarios:
Extensión de las funcionalidades de los lectores XAML base o escritores XAML (procesando el flujo de nodo XAML directamente; derivando su propio lector XAML o escritor XAML).
Definir tipos personalizados utilizables de XAML que no tienen dependencias de marco específicas y atribuir los tipos para transmitir sus características del sistema de tipos XAML a los servicios XAML de .NET.
Hospedar lectores XAML o escritores XAML como componente de una aplicación, como un diseñador visual o un editor interactivo para orígenes de marcado XAML.
Escritura de convertidores de valores XAML (extensiones de marcado; convertidores de tipos para tipos personalizados).
Definir un contexto de esquema XAML personalizado (mediante técnicas alternativas de carga de ensamblados para orígenes de tipos de respaldo; usar técnicas de búsqueda de tipos conocidos en lugar de reflejar siempre ensamblados; usar conceptos de ensamblado cargados que no usan common Language Runtime (CLR)
AppDomain
y su modelo de seguridad asociado).Extender el sistema de tipos XAML base.
Usar las técnicas de
Lookup
oInvoker
para influir en el sistema de tipos XAML y cómo se evalúan las copias de seguridad de tipos.
Si buscas material introductorio en XAML como lenguaje, puedes probar información general de XAML (WPF .NET). En ese tema se describe XAML para una audiencia que es nueva tanto para Windows Presentation Foundation (WPF) como para usar características de lenguaje XAML y marcado XAML. Otro documento útil es el material introductorio de la especificación del lenguaje XAML .
Servicios XAML de .NET y System.Xaml
en la arquitectura de .NET
Los servicios XAML de .NET y el ensamblado de System.Xaml
definen gran parte de lo que se necesita para admitir características del lenguaje XAML. Esto incluye clases base para lectores XAML y escritores XAML. La característica más importante agregada a los servicios XAML de .NET que no estaba presente en ninguna de las implementaciones XAML específicas del marco es una representación del sistema de tipos para XAML. La representación del sistema de tipos presenta XAML de forma orientada a objetos que se centra en las funcionalidades XAML sin tener que depender de funcionalidades específicas de marcos.
El sistema de tipos XAML no está limitado por el formato de marcado o los detalles en tiempo de ejecución del origen XAML; ni está limitado por ningún sistema de tipo de respaldo específico. El sistema de tipos XAML incluye representaciones de objetos para tipos, miembros, contextos de esquema XAML, conceptos de nivel XML y otros conceptos de lenguaje XAML o intrínsecos XAML. El uso o la ampliación del sistema de tipos XAML permite derivar de clases como lectores XAML y escritores XAML, y ampliar la funcionalidad de representaciones XAML en características específicas habilitadas por un marco, una tecnología o una aplicación que consume o emite XAML. El concepto de contexto de esquema XAML permite operaciones prácticas de escritura de grafos de objetos a partir de la combinación de una implementación del escritor de objetos XAML, un sistema de tipos de respaldo de una tecnología tal como se comunica a través de la información de ensamblado en el contexto y el origen del nodo XAML. Para obtener más información sobre el concepto de esquema XAML. consulta contexto de esquema XAML predeterminado y contexto de esquema XAML de WPF.
Secuencias de nodos XAML, lectores XAML y escritores XAML
Para comprender el rol que desempeñan los servicios XAML de .NET en la relación entre el lenguaje XAML y las tecnologías específicas que usan XAML como lenguaje, resulta útil comprender el concepto de flujo de nodo XAML y cómo ese concepto da forma a la API y la terminología. El flujo de nodo XAML es un intermedio conceptual entre una representación de lenguaje XAML y el gráfico de objetos que el XAML representa o define.
Un lector XAML es una entidad que procesa XAML de algún modo y genera un flujo de nodo XAML. En la API, un lector XAML se representa mediante la clase base XamlReader.
Un escritor XAML es una entidad que procesa una secuencia de nodos XAML y genera otra cosa. En la API, un escritor XAML se representa mediante la clase base XamlWriter.
Los dos escenarios más comunes que implican XAML cargan XAML para crear instancias de un gráfico de objetos y guardar un gráfico de objetos de una aplicación o herramienta y generar una representación XAML (normalmente en formato de marcado guardado como archivo de texto). La carga de XAML y la creación de un grafo de objetos se conoce a menudo en esta documentación como ruta de acceso de carga. Guardar o serializar un gráfico de objetos existente en XAML se conoce a menudo en esta documentación como ruta de acceso de guardado.
El tipo de ruta de acceso de carga más común se puede describir de la siguiente manera:
Comience con una representación XAML, en formato XML codificado en UTF y guardado como un archivo de texto.
Cargue ese XAML en XamlXmlReader. XamlXmlReader es una subclase XamlReader.
El resultado es un flujo de nodo XAML. Puedes acceder a nodos individuales del flujo de nodos XAML mediante XamlXmlReader / XamlReader API. La operación más típica aquí es avanzar a través de la secuencia de nodos XAML, procesando cada nodo mediante una metáfora de "registro actual".
Pase los nodos resultantes del flujo de nodos XAML a una API de XamlObjectWriter. XamlObjectWriter es una subclase XamlWriter.
El XamlObjectWriter escribe un gráfico de objetos, un objeto a la vez, de acuerdo con el progreso a través del flujo de nodo XAML de origen. La escritura de objetos se realiza con la ayuda de un contexto de esquema XAML y una implementación que puede tener acceso a los ensamblados y tipos de un sistema y marco de respaldo.
Llame a Result al final del flujo de nodo XAML para obtener el objeto raíz del gráfico de objetos.
El tipo más común de ruta de acceso de guardado se puede describir de la siguiente manera:
Comience con el gráfico de objetos de todo el tiempo de ejecución de una aplicación, el contenido de la interfaz de usuario y el estado de un tiempo de ejecución, o un segmento menor de la representación de objetos de una aplicación general en tiempo de ejecución.
Desde un objeto de inicio lógico, como una raíz de aplicación o raíz del documento, cargue los objetos en XamlObjectReader. XamlObjectReader es una subclase XamlReader.
El resultado es un flujo de nodo XAML. Puedes acceder a nodos individuales del flujo de nodos XAML mediante XamlObjectReader y XamlReader API. La operación más típica aquí es avanzar a través de la secuencia de nodos XAML, procesando cada nodo mediante una metáfora de "registro actual".
Pase los nodos resultantes del flujo de nodos XAML a una API de XamlXmlWriter. XamlXmlWriter es una subclase XamlWriter.
El XamlXmlWriter escribe XAML en una codificación UTF XML. Puede guardarlo como un archivo de texto, como una secuencia o en otros formularios.
Llame a Flush para obtener la salida final.
Para obtener más información sobre los conceptos de flujo de nodo XAML, consulta Descripción de las estructuras y conceptos de flujo de nodo XAML.
La clase XamlServices
No siempre es necesario tratar con un flujo de nodo XAML. Si desea una ruta de acceso de carga básica o una ruta de acceso de guardado básica, puede usar las API de la clase XamlServices.
Varias firmas de Load implementan una ruta de acceso de carga. Puedes cargar un archivo o una secuencia, o puedes cargar una XmlReader, TextReader o XamlReader que encapsulan la entrada XAML cargando con las API de ese lector.
Varias firmas de Save guardar un gráfico de objetos y generar resultados como una secuencia, un archivo o una instancia de XmlWriter/TextWriter.
Transform convierte XAML vinculando una ruta de acceso de carga y una ruta de acceso de guardado como una sola operación. Se podría usar un contexto de esquema diferente o un sistema de tipos de respaldo diferentes para XamlReader y XamlWriter, que es lo que influye en cómo se transforma el XAML resultante.
Para obtener más información sobre cómo usar XamlServices, consulta clase XAMLServices y Lectura básica de XAML o Escritura.
Sistema de tipos XAML
El sistema de tipos XAML proporciona las API necesarias para trabajar con un nodo individual determinado de un flujo de nodo XAML.
XamlType es la representación de un objeto: lo que se está procesando entre un nodo de objeto de inicio y un nodo de objeto final.
XamlMember es la representación de un miembro de un objeto: lo que se está procesando entre un nodo de miembro inicial y un nodo de miembro final.
Las API como GetAllMembers y GetMember y DeclaringType notifican las relaciones entre un XamlType y XamlMember.
El comportamiento predeterminado del sistema de tipos XAML tal como lo implementan los servicios XAML de .NET se basa en Common Language Runtime (CLR) y en el análisis estático de tipos CLR en ensamblados mediante la reflexión. Por lo tanto, para un tipo CLR específico, la implementación predeterminada del sistema de tipos XAML puede exponer el esquema XAML de ese tipo y sus miembros y notificarlo en términos del sistema de tipos XAML. En el sistema de tipos XAML predeterminado, el concepto de asignación de tipos se asigna a la herencia CLR y los conceptos de instancias, tipos de valor, etc., también se asignan a los comportamientos y características auxiliares de CLR.
Referencia de las características del lenguaje XAML
Para admitir XAML, los servicios XAML de .NET proporcionan una implementación específica de conceptos de lenguaje XAML tal como se definen para el espacio de nombres XAML del lenguaje XAML. Se documentan como páginas de referencia específicas. Las características del lenguaje se documentan desde la perspectiva de cómo se comportan estas características de lenguaje cuando se procesan mediante un lector XAML o un escritor XAML definido por los servicios XAML de .NET. Para obtener más información, consulta características de lenguaje del espacio de nombres XAML (x:).
.NET Desktop feedback