Compartir a través de


Arquitectura de analizador de XAML

Actualización: noviembre 2007

Windows Presentation Foundation (WPF) Designer for Visual Studio carga los documentos XAML (Lenguaje de marcado de aplicaciones extensible) y crea objetos de WPF para su presentación en Visual Studio. Los errores que se producen durante la carga aparecen en la ventana Lista de errores.

Fases de la carga de XAML

WPF Designer carga un documento XAML y crea el árbol de sintaxis abstracta (AST) correspondiente. El AST es una estructura de datos que representa el XAML analizado. Se trata de un árbol finito, con etiquetas y dirigido cuyos nodos internos se etiquetan mediante operadores y cuyos nodos de hoja representan los operandos de los operadores de nodo. Las hojas tienen operadores sin argumentos, que son variables o constantes.

La carga de un documento XAML se produce en varias fases, como se muestra en la tabla siguiente.

Fase de carga de XAML

Description

Comprobación de la sintaxis XML

Escáner: paso léxico que comprueba la existencia de cualquier incorrección o si hay caracteres no válidos, y crea los tokens léxicos.

Analizador: crea el AST y realiza el análisis de pares para asegurarse de que las etiquetas están bien formadas y equilibradas.

Comprobación de la sintaxis XAML

ConvertToXaml busca todos los tipos, coloca la información de tipos en el AST de XAML y anota el AST de XAML.

En la validación se efectúa la comprobación de errores y de las posiciones de los nodos en el árbol.

Creación de instancias de modelos y objetos

Fase discreta que recorre el AST de manera independiente, que crea los objetos del modelo de edición y de WPF.

Los nodos que tienen errores de fases anteriores se marcan como erróneos y no se visitan de nuevo durante las fases subsiguientes. Si se producen errores en las fases de analizador y escáner, no se intenta realizar la fase de creación de instancias de modelos y objetos.

Comprobación de la sintaxis XML

Las fases de analizador y escáner comprueban que el documento que se va a cargar sea un documento XML bien formado que no contenga errores de sintaxis XML. Un ejemplo de error de sintaxis XML es una etiqueta <Button> sin su correspondiente etiqueta de cierre </Button>. El analizador intenta efectuar la recuperación de errores, lo que puede dar lugar a que se notifiquen varios errores en un mismo intento de analizar el documento.

Comprobación de la sintaxis XAML

El analizador recorre el AST de XML en pasos independientes para comprobar que el documento es un documento XAML válido, es decir, que es conforme con el esquema XML de XAML y no contiene XAML no válido. Un ejemplo de XAML no válido es un elemento que utiliza declaraciones de propiedades no válidas, como <Button Foo="Mark">.

Estos pasos incluyen la resolución de tipos, a fin de permitir la validación de la información, como los nombres de elementos y de propiedades, con respecto al tipo de elemento. Por ejemplo, el analizador comprueba si Foo es una propiedad de Button. Si faltan tipos, se producen errores.

El analizador intenta efectuar la recuperación de errores, lo que puede dar lugar a que se notifiquen varios errores en un mismo intento de analizar el documento. Sin embargo, no se notifican todos los posibles errores. Por ejemplo, si está mal escrito el nombre de un elemento y también el nombre de una propiedad de ese elemento, sólo se notificará inicialmente el error del elemento, porque no se pueden validar los nombres de las propiedades hasta que el elemento se haya resuelto correctamente.

Nota:

Esta fase no incluye la validación de valores de propiedades. Por ejemplo, <Button Background="xBlue"/> no se detecta durante esta fase. Vea la explicación más adelante en este tema.

Creación de instancias de modelos y objetos

Al final de la comprobación de la sintaxis, hay un AST correspondiente al XAML que es un DocumentTree específico de XAML que actúa como una vista o un cursor de ese AST.

En la última fase, se crean instancias del modelo y de las instancias subyacentes. Además, se convierten los valores de propiedades a partir de las cadenas y se asignan. Para ello, el analizador crea DocumentTree mediante la clase ModelDocumentTreeManager. Cuando se crea DocumentTree para el XAML, también se crean las instancias de WPF subyacentes. Estas instancias se utilizan como la vista en el diseñador.

Si se produce una excepción al crear el modelo y las instancias, no se completará la creación de los objetos correspondientes a los elementos secundarios del nodo donde se produzca el error. El modelo se construye para el resto del árbol. Esto expone tantos errores como sea posible.

Por ejemplo, en el fragmento de código, <Button Background="Test"/>, el objeto TypeConverter del tipo Brush intenta convertir Test en una instancia de Brush. Dado que Test no es un valor válido de Brush, el convertidor de tipos produce una excepción que detiene el proceso de análisis para todos los nodos secundarios, pero la excepción no afecta al análisis del resto del documento.

Los valores de propiedades se convierten a partir de las cadenas al crear la instancia del objeto propietario. Esto sucede cuando el objeto propietario se utiliza en la superficie de diseño. Numerosos valores de intervalo de valores no se notifican hasta que el diseñador utiliza el objeto primario.

Este comportamiento es similar a la compilación de WPF. El compilador de WPF no valida ni intenta convertir los valores de atributo (propiedad) durante la compilación. No se llama a los convertidores de tipos hasta que WPF crea la instancia del árbol de objetos en tiempo de ejecución.

Nota:

Para cargar diccionarios de recursos externos, se produce una interacción entre el modelo de edición y el analizador. Cuando el modelo de edición tiene que cargar archivos XAML adicionales, activa una operación de carga de XAML.

Mensajes de error

Existe un tema de Ayuda sobre mensajes de error de WPF Designer en que se describe en qué fases de la carga de XAML se produce el error. En la tabla siguiente se muestra la correspondencia entre los mensajes y las fases.

Fase de carga de XAML

Mensaje de error

Comprobación de la sintaxis XML

Este error se produce cuando el archivo XAML es un documento XML que no está bien formado.

Comprobación de la sintaxis XAML

Este error se produce cuando el archivo es un documento XML válido, pero no está bien formado.

Creación de instancias de modelos y objetos

Este error se produce cuando el archivo es un documento XAML bien formado, pero contiene uno o varios tipos que no coinciden.

Vea también

Conceptos

Errores de XAML y Ayuda

Referencia

DocumentTree

ModelDocumentTreeManager

Otros recursos

Referencia de mensajes de error para WPF Designer

XAML

Usar recursos