Compartir a través de


Código subyacente y XAML en WPF

Código subyacente es un término empleado para describir el código unido con objetos definidos por marcado cuando una página XAML se compila por marcado. 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 siguientes secciones:

  • Requisitos previos

  • Código subyacente y el lenguaje XAML

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

  • x:Code

  • Limitaciones del código insertado

Requisitos previos

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

Código subyacente y el lenguaje XAML

El lenguaje XAML incluye características de nivel de lenguaje que permiten asociar archivos de código a archivos de marcado, desde el lado del archivo de marcado. En concreto, el lenguaje XAML define las características de lenguaje x:Class (Directiva), x:Subclass (Directiva) y x:ClassModifier (Directiva). La forma exacta en que se debe generar el código, y cómo integrar el marcado y el código, no forma parte de lo que especifica el lenguaje XAML. Son los marcos como WPF los que determinan cómo integrar el código, cómo usar XAML en los modelos de programación y aplicaciones, y las acciones de compilación u otras tareas que sean necesarias para todo ello.

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

  • La clase parcial debe derivarse del tipo que respalda al elemento raíz.

  • Tenga en cuenta que según el comportamiento predeterminado de las acciones de compilación por marcado, puede dejar en blanco la derivación en la definición de clase parcial en el lado del código subyacente. El resultado compilado supondrá que el tipo de respaldo de la raíz de la página es la base para la clase parcial, aunque no se especifique. Sin embargo, no se recomienda confiar en este comportamiento.

  • Los controladores de eventos que escribe en el código subyacente deben ser métodos de instancia y no pueden ser métodos estáticos. La clase parcial debe definir estos métodos 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 para un evento que se desencadena en otro ámbito de clase.

  • El controlador debe coincidir con el delegado para el evento adecuado en el sistema de tipos de respaldo.

  • En particular para el lenguaje Microsoft Visual Basic, 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 la palabra clave Handles no puede admitir todas las características específicas del sistema de eventos de WPF, como algunos escenarios de eventos enrutados o eventos adjuntos. Para obtener información 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 alineado. 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 evitar o limitar el uso de código alineado. 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 alineado puede resultar complicada, ya que siempre se escribe en la clase parcial generada de XAML, lo que solo permite usar 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 de WPF, pero no todos; esto le obligará a calificar totalmente las llamadas a los tipos y miembros contenidos dentro de los demás espacios de nombres CLR. En el código alineado tampoco puede definir nada que no sea la clase parcial. Además, todas las entidades de código de usuario a las que haga referencia 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 x:Code (Tipo XAML intrínseco).

Vea también

Referencia

x:Code (Tipo XAML intrínseco)

Conceptos

Información general sobre XAML (WPF)

Compilar una aplicación de WPF (WPF)

Detalles de la sintaxis XAML