Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El código subyacente es un término que se usa para describir el código que se combina con objetos definidos por marcado, cuando se compila una página XAML. 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:
Prerrequisitos
En este tema se da por supuesto que has leído el XAML en WPF y tienes algunos conocimientos básicos de la programación CLR y orientada a objetos.
Code-Behind y el lenguaje XAML
El lenguaje XAML incluye características de nivel de lenguaje que permiten asociar archivos de código con archivos de marcado, desde el lado del archivo de marcado. En concreto, el lenguaje XAML define las características de lenguaje x:Class Directive, x:Subclass Directive y x:ClassModifier Directive. Exactamente cómo 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. Se deja en marcos como WPF para determinar cómo integrar el código, cómo usar XAML en la aplicación y los modelos de programación, y las acciones de compilación u otra compatibilidad que requiera todo esto.
Requisitos de código subyacente, controlador de eventos y clases parciales en WPF
La clase parcial debe derivar del tipo que respalda el elemento raíz.
Tenga en cuenta que, bajo el comportamiento predeterminado de las acciones de compilación de marcado, puede dejar la derivación en blanco en la definición de clase parcial en la parte del código detrás. El resultado compilado considerará el tipo de respaldo de la raíz de página como base para la clase parcial, incluso si no se especifica. Sin embargo, confiar en este comportamiento no es un procedimiento recomendado.
Los controladores de eventos que escriba en el código subyacente deben ser métodos de instancia y no pueden ser métodos estáticos. Estos métodos deben definirse mediante la clase parcial dentro del espacio de nombres CLR identificado por
x:Class
. No puedes especificar el nombre de un controlador de eventos para indicar a un procesador XAML que busque un controlador de eventos con el propósito de enlazar eventos en un ámbito de clase diferente.El controlador debe coincidir con el delegado para el evento adecuado en el sistema de tipos de respaldo.
Para el lenguaje de Microsoft Visual Basic específicamente, puedes usar la palabra clave específica
Handles
del lenguaje para asociar controladores con instancias y eventos en la declaración del controlador, en lugar de adjuntar controladores con atributos en XAML. Sin embargo, esta técnica tiene algunas limitaciones porque laHandles
palabra clave no puede admitir todas las características específicas del sistema de eventos WPF, como determinados escenarios de eventos enrutados o eventos adjuntos. Para obtener más información, consulte Control de eventos de Visual Basic y WPF.
x:Code
x:Code es un elemento de directiva definido en XAML. Un x:Code
elemento de directiva puede contener código de programación en línea. El código definido en línea puede interactuar con el XAML en la misma página. En el ejemplo siguiente se muestra el código C# en línea. Observe que el código está dentro del x:Code
elemento y que el código debe estar rodeado de <CDATA[
...]]>
para escapar el contenido de XML, de modo que un procesador XAML (interpretando el esquema XAML o el esquema WPF) no intentará interpretar el contenido literalmente como XML.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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 en línea
Debe considerar la posibilidad de evitar o limitar el uso de código insertado. En términos de arquitectura y filosofía de codificación, el mantenimiento de una separación entre marcado y código subyacente mantiene los roles de diseñador y desarrollador mucho más distintos. En un nivel más técnico, el código que escribes para el código en línea puede ser incómodo de escribir, ya que siempre estás escribiendo en la clase parcial generada por XAML y solo puedes usar los mapeos predeterminados de espacios de nombres XML. Dado que no puede agregar using
instrucciones, debe calificar por completo muchas de las llamadas API que realice. Las asignaciones predeterminadas de WPF incluyen la mayoría, pero no todos, los espacios de nombres CLR que están presentes en los ensamblados de WPF; tendrá que especificar completamente las llamadas a tipos y miembros contenidos en los demás espacios de nombres CLR. Tampoco puede definir nada más allá de la clase parcial en el código insertado, y todas las entidades de código de usuario a las que hace referencia deben existir como miembro o variable dentro de la clase parcial generada. Otras características de programación específicas del lenguaje, como macros o #ifdef
en variables globales o variables de compilación, tampoco están disponibles. Para obtener más información, consulta Tipo XAML intrínseco x:Code.
Consulte también
.NET Desktop feedback