Leer o escribir la clase XAMLServices y XAML básico

XamlServices es una clase que proporciona .NET con la que puede administrar escenarios de XAML que no requieren un acceso específico al flujo de nodos XAML o a la información del sistema de tipo XAML que se obtiene de dichos nodos. La API de XamlServices se puede resumir de la siguiente manera: Load o Parse para admitir una ruta de acceso de carga de XAML, Save para admitir una ruta de acceso de guardado de XAML y Transform para proporcionar una técnica que une una ruta de acceso de carga y una de guardado. Transform permite cambiar entre esquemas XAML distintos. Este tema resume las distintas clasificaciones de API y describe las diferencias existentes entre las sobrecargas de método específicas.

Carga

Son varias las sobrecargas de Load que implementan la lógica completa para una ruta de acceso de carga. Esta ruta usa XAML en ciertos formularios y genera un flujo de nodo XAML. La mayoría de estas rutas de acceso de carga usan XAML en un formulario de archivo de texto XML codificado. No obstante, también puede cargar un flujo general o un origen XAML cargado previamente que ya esté incluido en otra implementación de XamlReader .

La sobrecarga más simple en la mayoría de los escenarios es Load(String). Esta sobrecarga tiene un parámetro fileName que consiste simplemente en el nombre de un archivo de texto que contiene el XAML que se debe cargar. Resulta adecuada para escenarios de aplicación como los correspondientes a aplicaciones de plena confianza, que han serializado con anterioridad el estado o los datos en el equipo local. También resulta útil en marcos donde se define el modelo de aplicación y se desea cargar uno de los archivos estándar que establecen el comportamiento de la aplicación, la interfaz de usuario de inicio u otras capacidades definidas por el marco en las que se usa XAML.

Los escenarios deLoad(Stream) son similares. Esta sobrecarga puede resultar útil cuando es el usuario quien elige los archivos que se deben cargar, porque Stream es una salida frecuente de otras API de System.IO , que pueden acceder a un sistema de archivos. O bien, podría acceder a los orígenes XAML a través de descargas asincrónicas u otras técnicas de red que también proporcionan un flujo (La carga desde una secuencia o un origen seleccionado por el usuario puede tener implicaciones de seguridad. Para obtener más información, consulta Consideraciones de seguridad sobre XAML).

Las sobrecargas Load(TextReader) y Load(XmlReader) se basan en lectores de formatos de versiones anteriores de .NET. Para usar estas sobrecargas, debe haber creado una instancia de lector y haber cargado XAML en el formulario pertinente (de texto o XML) con la API Create. No es relevante si previamente ha movido los punteros de registro en los otros lectores o ha realizado con ellos otras operaciones. La lógica de la ruta de acceso de carga de Load siempre procesa la entrada XAML completa desde la raíz. Los escenarios siguientes pueden garantizar el uso de estas sobrecargas:

  • Superficies de diseño a las que se proporciona la capacidad de edición de XAML simple desde un editor de texto específico de XML existente.

  • Variantes de los principales escenarios de System.IO , donde se usan lectores dedicados para abrir archivos o flujos. La lógica procesa o comprueba el contenido de forma rudimentaria antes de intentar cargarlo como XAML.

Para cargar un archivo, un flujo o un valor XmlReader, TextReader o XamlReader que se ajuste a una entrada XAML, cargue las API del lector.

Internamente, cada una de las sobrecargas anteriores se convierte en última instancia en Load(XmlReader)y, con el valor XmlReader anterior, se crea un valor XamlXmlReadernuevo.

La firma de Load que se proporciona para los escenarios más avanzados es Load(XamlReader). Puede usarla en los casos siguientes:

  • Si ha definido su propia implementación de un elemento XamlReader.

  • Si debe especificar una configuración de XamlReader distinta de la predeterminada.

Ejemplos de configuración no predeterminada:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

El lector predeterminado para XamlServices es XamlXmlReader. Si proporciona su propio valor XamlXmlReader, puede configurar las propiedades siguientes para establecer un valor XamlXmlReaderSettings no predeterminado:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Analizar

Parse es como Load en el sentido de que también es una API de ruta de acceso de carga, que crea un flujo de nodo XAML desde la entrada XAML. Sin embargo, en este caso, la entrada XAML se proporciona directamente como una cadena que incluye todo el contenido XAML que se debe cargar. Parse ofrece un enfoque más ligero y apropiado para los escenarios de aplicación que los escenarios de marco. Para obtener más información, vea Parse. Parse es solo una llamada de Load(XmlReader) encapsulada que implica un valor StringReader de forma interna.

Guardar

Son varias las sobrecargas de Save que implementan la ruta de acceso de guardado. Todos los métodos Save toman un gráfico de objetos como entrada y generan el resultado como un flujo, un archivo o una instancia de XmlWriter/TextWriter .

Se espera que el objeto de entrada sea el objeto raíz de alguna representación de objeto. Podría tratarse de la raíz única de un objeto de negocios, de la raíz de un árbol de objetos de una página en un escenario de interfaz de usuario, de la superficie de edición de trabajo de una herramienta de diseño, o de otros conceptos de objeto raíz adecuados para los distintos escenarios.

En muchos escenarios, el árbol de objetos que se guarda está relacionado con una operación original que ha cargado XAML con Load o con otra API que se ha implementado mediante un modelo de aplicación o marco. En el árbol de objetos se pueden capturar diferencias debidas a cambios de estado, cambios donde la aplicación haya capturado la configuración en tiempo de ejecución de un usuario, cambios de XAML si la aplicación es una superficie de diseño XAML, etc. Con o sin cambios, el concepto de primera carga de XAML a partir del marcado para, a continuación, guardar de nuevo y comparar los dos formularios de marcado XAML, también se conoce como representación de ida y vuelta de XAML.

El desafío a la hora de guardar y serializar un objeto complejo que se establece en un formulario de marcado es lograr un equilibrio entre la representación completa, sin pérdida de información, y el nivel de detalle por el que el XAML suena menos natural. Además, los diferentes clientes de XAML pueden tener distintas definiciones o expectativas sobre cómo establecer dicho equilibrio. Las API de Save representan una definición de este equilibrio. Las API de Save usan el contexto de esquema XAML disponible y las características predeterminadas basadas en CLR de XamlType, XamlMembery otros conceptos del sistema de tipos XAML e intrínsecos de XAML, para determinar dónde se pueden optimizar determinadas construcciones de flujo de nodo XAML cuando se guardan de nuevo en el marcado. Por ejemplo, XamlServices guarda las rutas de acceso que pueden usar el contexto de esquema XAML predeterminado basado en CLR para resolver XamlType para los objetos, puede determinar XamlType.ContentPropertyy, a continuación, puede omitir las etiquetas de elemento de propiedad cuando escriben la propiedad en el contenido XAML del objeto.

Transformación

Para convertir o transformar XAML,Transform vincula una ruta de acceso de carga y otra de guardado como una única operación. Puede usarse un contexto de esquema o un sistema de tipos de respaldo diferentes para XamlReader y XamlWriter, lo que afectará a cómo se transforma el XAML resultante. Esto funciona bien para las operaciones de transformaciones amplias.

Por lo general, Transformno se usa en las operaciones en las que se examina cada uno de los nodos de un flujo de nodo XAML. En su lugar, deberá definir su propia serie de operaciones de ruta de acceso de carga y guardado, e interponer su propia lógica. En una de las rutas de acceso, use un par lector XAML-escritor XAML en torno a su propio bucle de nodo. Por ejemplo, cargue el XAML inicial con XamlXmlReader y recorra los nodos con llamadas de Read sucesivas. Desde el nivel de flujo de nodo XAML ya puede ajustar los nodos individuales (tipos, miembros, etc.) para aplicar una transformación, o dejar el nodo tal cual. A continuación, envíe el nodo hacia adelante hasta la API de Write correspondiente de un elemento XamlObjectWriter y escriba el objeto. Para obtener más información, consulta Understanding XAML Node Stream Structures and Concepts.

Vea también