Código subyacente y XAML

Actualización: noviembre 2007

Código subyacente es un término utilizado para describir el código unido al código creado por un procesador XAML cuando se compila una página XAML en una aplicación. En este tema se describen los requisitos para el código subyacente, así como un mecanismo de código insertado alternativo para el código en XAML.

Este tema contiene las secciones siguientes.

  • Requisitos previos
  • Requisitos del código subyacente, los controladores de eventos y las clases parciales
  • x:Code
  • Limitaciones del código insertado
  • Temas relacionados

Requisitos previos

En este tema se da por hecho que ha leído Información general sobre XAML y que cuenta con conocimientos básicos de CLR y de programación orientada a objetos.

Requisitos del código subyacente, los controladores de eventos y las clases parciales

  • La clase parcial debe derivarse del tipo de clase utilizado como elemento raíz. Puede dejar en blanco la derivación en la definición de clase parcial del código subyacente, pero en este caso en el resultado compilado se supondrá que la raíz de la página es la clase base de la clase parcial aunque no se especifique (porque la parte correspondiente al marcado de la clase parcial sí especifica la raíz de la página como base).

  • Los controladores de eventos que se escriban deben ser métodos de instancia definidos por la clase parcial dentro del espacio de nombres CLR identificado por x:Class. No se puede calificar el nombre de un controlador de eventos para indicar a un procesador XAML que lo busque en otro ámbito de clase. Tampoco se pueden utilizar métodos estáticos como controladores de eventos.

  • El controlador de eventos debe coincidir con el delegado del evento apropiado.

  • En particular para el lenguaje Microsoft Visual Basic .NET, puede utilizar la palabra clave Handles específica del lenguaje para asociar los controladores a instancias y eventos en la declaración del controlador, en lugar de asociar los controladores a los atributos en XAML. Sin embargo, esta técnica tiene algunas limitaciones porque Handles no puede admitir todas las características específicas del sistema de eventos de WPF, como algunos escenarios de eventos enrutados o asociados. Para obtener información más detallada, vea Control de eventos en Visual Basic y WPF.

x:Code

x:Code es un elemento de directiva definido en XAML. Un elemento de directiva x:Code puede contener código de programación insertado. El código insertado que se define puede interactuar con XAML en la misma página. En el siguiente ejemplo se ilustra el código insertado C#. Observe que el código está dentro del elemento x:Code y que el código debe estar entre <CDATA[...]]>, una secuencia de escape para el contenido en XML, de manera que un procesador XAML (que interprete el esquema de XAML o el esquema de WPF) no intente interpretar literalmente el contenido como XML.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

Limitaciones del código insertado

Debe estudiar la posibilidad de evitar o limitar el uso del código insertado en aplicaciones basadas en XAML. Por lo que se refiere a la arquitectura y la filosofía de codificación, mantener una separación entre el marcado y el código subyacentes permite diferenciar mucho mejor las funciones de programador y diseñador. En un plano más técnico, la escritura de código para insertarlo puede resultar complicado, porque siempre se escribe en la clase parcial generada de la página XAML, lo que permite utilizar únicamente las asignaciones de espacio de nombres XML predeterminadas. Al no poder agregar instrucciones using, debe calificar totalmente muchas de las llamadas a las API que se realizan. Las asignaciones de WPF predeterminadas incluyen la mayoría de los espacios de nombres CLR que se encuentran en los ensamblados WPF, pero no todos; esto le obligará a calificar totalmente las llamadas a las API contenidas dentro de los demás espacios de nombres CLR. En el código insertado tampoco puede definir varias clases. Además, todas las entidades de código deben existir como un miembro o una variable dentro de la clase parcial generada. Tampoco están disponibles otras características de programación específicas del lenguaje, tales como las macros o las #ifdef para variables globales o de compilación. Para obtener más información, consulte Elemento de directiva x:Code de XAML.

Vea también

Conceptos

Información general sobre XAML

Generar una aplicación de WPF (WPF)

Terminología de la sintaxis de XAML

Referencia

Elemento de directiva x:Code de XAML