TOC

This article has been localized into Spanish by the community.

XAML:

Eventos en XAML

La mayoría de los marcos (frameworks) de UI modernos al igual que WPF, están impulsados por eventos. Todos los controles, incluida la ventana (Window) (que también hereda la clase control) exponen un rango de eventos a los que puede suscribirse. Usted puede suscribirse a estos eventos, lo que significa que su aplicación será notificada cuando ocurran y podrá entonces reaccionar a ellos.

Hay muchos tipos de eventos, pero algunos de los más comúnmente utilizados están hechos para responder a la interacción del usuario con su aplicación, con el ratón o el teclado. En la mayoría de los controles se encuentran eventos como KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp y varios otros.

Examinaremos más de cerca cómo funcionan los eventos en WPF, ya que este es un tema complejo, pero por ahora, debe saber cómo vincular un evento de control en XAML con un fragmento de código en su archivo de código subyacente (Code-behind). Echa un vistazo a este ejemplo:

<Window x:Class="WpfTutorialSamples.XAML.EventsSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="EventsSample" Height="300" Width="300">
	<Grid Name="pnlMainGrid" MouseUp="pnlMainGrid_MouseUp" Background="LightBlue">        
		
    </Grid>
</Window>

Observe cómo nos hemos suscrito al evento MouseUp del Grid escribiendo un nombre de método. Este método debe definirse en código subyacente (code-behind), utilizando la firma de eventos correcta. En este caso debería verse así:

private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
	MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
}

El evento MouseUp utiliza un delegado llamado MouseButtonEventHandler, al que debe suscribirse. Tiene dos parámetros, un emisor (el control que causó el evento) y un objeto MouseButtonEventArgs que contendrá información útil. Lo utilizamos en este ejemplo para obtener la posición del cursor y notificar al usuario.

Varios eventos pueden utilizar el mismo tipo de delegado - por ejemplo, MouseUp y MouseDown utilizan MouseButtonEventHandler, mientras que el evento MouseMove utiliza el delegado MouseEventHandler. Cuando se define el método de gestión del evento, se necesita saber que delegado utiliza. Si se desconoce, se puede buscar en la documentación.

Afortunadamente, Visual Studio nos ayuda generando el gestor del evento. La manera más fácil para realizar esto es simplemente escribir el nombre del evento en XAML y dejar que el IntelliSense de VS haga el resto por tí:

Al seleccionar <New Event Handler> Visual Studio generará un gestor de evento apropiado en el código subyacente (Code-behind). El nombre seguirá la estructura de <control name>_<event name>, en nuestro caso pnlMainGrid_MouseDown. Realizar click-Derecho en el nombre del evento y seleccionar Navegar al Evento te llevara directamente a él.

Suscribiendose a un evento desde el código subyacente (Code-behind)

La manera más común de suscribirse a eventos es explicada en el párrafo anterior, pero pueden haber situaciones donde prefieras suscribir eventos directamente desde el código subyacente. Esto se realiza utilizando el sintaxis += de C#, donde agregas en gestor de eventos al evento directamente en el objeto. La explicación completa pertenece a un ejemplo dedicado a C#, pero por comparación, aquí hay un ejemplo:

using System;
using System.Windows;
using System.Windows.Input;


namespace WpfTutorialSamples.XAML
{
	public partial class EventsSample : Window
	{
		public EventsSample()
		{
			InitializeComponent();
			pnlMainGrid.MouseUp += new MouseButtonEventHandler(pnlMainGrid_MouseUp);
		}

		private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
		{
			MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
		}

	}
}

Une vez más, necesitas saber que delegado utilizar, y una vez más, Visual Studio puede ayudarte. Apenas escribes:

pnlMainGrid.MouseDown +=

Visual Studio ofrecerá su asistencia:

Simplemente presiona la tecla [Tab] dos veces para que Visual Studio genere el gestor de evento por tí, directamente debajo del método actual, listo para ser implementado. Cuando se suscribe a los eventos de esta manera, no es necesario hacerlo en XAML.