TOC

This article has been localized into French by the community.

Le XAML:

Les évènements en XAML

La plupart des frameworks UI modernes sont pilotés par les évènements, il en est de même pour WPF. Tout les contrôles, même les fenêtres, (qui héritent également de la classe Control ), possèdent un ensemble d'évènements auquel vous pouvez souscrire. Il est possible de souscrire à ces évènements, ce qui veut dire que votre application sera avertie quand ils se produiront et vous pourrez y réagir.

Il y a un grand nombre de types d'évènements. Mais les plus utilisés sont ceux qui réagissent aux interactions faites par l'utilisateur avec votre application en utilisant une souris ou un clavier. Sur la plupart des contrôles vous trouverez des évènements comme : KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp et plusieurs autres.

Nous verrons plus en détail comment marchent les événements en WPF car c'est un sujet complexe, mais pour l'instant, nous devons savoir comment lier un événement d'un contrôle XAML à un code dans notre précédent fichier. Jetez un coup d’œil à cet exemple :

<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>

Remarquez de quelle façon nous nous sommes abonnés à l'évènement MouseUp de Grid : en écrivant un nom de méthode. Cette méthode nécessite d'être définie, plus loin dans le code, en utilisant la signature d'évènement correspondante. Dans ce cas, ça devrait ressembler à ça :

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

L'évènement MouseUp utilise un délégué appelé MouseButtonEventHandler, auquel vous vous êtes abonné. Il a deux paramètres, un sender (le contrôle qui a levé (détecté) l'évènement) et un objet de type MouseButtonEventArgs qui contiendra de précieuses informations. Nous l'utilisons dans cet exemple pour obtenir la position de la souris et en informer l'utilisateur.

Plusieurs événements peuvent utiliser le même type de délégué. Par exemple, MouseUp et MouseDown utilisent le même délégué MouseButtonEventHandler, tandis que l’événement MouseMove utilise le délégué MouseEventHandler. Quand on définit la méthode du gestionnaire d’événement (ou "event handler"), vous devez savoir quel délégué est utilisé et si vous ne savez pas cela, vous pouvez le trouver dans la documentation.

Heureusement, Visual Studio peut nous aider à générer un handler d'évènement correspondant à un évènement en particulier. La façon la plus simple de le faire est d'écrire tout simplement le nom de l'évènement en XAML et puis de laisser l'IntelliSense (complétion automatique) de VS faire le reste pour nous :

Quand vous sélectionnez <New Event Handlerr> Visual Studio générera un handler d'évènement approprié dans votre fichier Code-behind. Il sera nommé <control name>_<event name>, dans notre cas pnlMainGrid_MouseDown. Cliquez droit sur le nom de l'évènement et sélectionnez Navigate to Event Handler et VS vous amènera juste dessus.

S'abonner à un évènement par un code sous-jacent

La façon la plus commune pour s'abonner à un évènement est expliquée ci-dessus, mais il y a des fois où vous voulez vous abonner à un évènement directement à partir du Code-behind. Cela est possible en utilisant la syntaxe += de C#, où vous ajoutez un handler d'évènement directement à l'objet. L'explication complète de ce concept est disponible dans un exemple C# dédié mais pour comparaison, voici un exemple :

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 fois de plus, vous devez savoir quel délégué utiliser, et encore une fois, Visual Studio peut vous aider à cela. Dès que vous écrivez :

pnlMainGrid.MouseDown +=

Visual Studio vous offrira son aide :

Pressez tout simplement deux fois la touche [Tab] pour que Visual Studio génère le bon handler d'évènement pour vous, comme en dessous de la méthode actuelle, prêt à être implémenté. Quand vous vous abonnez à un évènement de cette manière, vous n'avez pas besoin de le faire en XAML.