This article has been localized into Catalan by the community.
Events a XAML
La majoria de frameworks UI estan basats en esdeveniments igual que WPF. Tots els controls, inclosa la Finestra-Window (que també hereta la classe Control) exposa un rang d'esdeveniments als quals ens podem subscriure. Us podeu subscriure a aquests esdeveniments, el que significa que la vostra aplicació serà notificada quan aquests es produeixin i pugueu reaccionar a aquests.
Hi ha molts tipus d'esdeveniments, però alguns dels més utilitzats hi són per respondre a la interacció de l'usuari amb la vostra aplicació utilitzant el ratolí o el teclat. En la majoria de controls et trobareu esdeveniments com KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp i molts altres.
Mirarem amb més detall com funcionen els esdeveniments dins WPF, donat que és un tema complex, però per ara, necessiteu saber com relacionar un esdeveniment de control en XAML a un codi al vostre arxiu associat. Doneu una ullada a aquest 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>
Fixeu-vos que ens hem subscrit a l'esdeveniment MouseUp del Grid escrivint el nom d'un mètode. Aquest mètode necessita estar definit dins el codi associat, usant la signatura de l'esdeveniment correcta. En aquest cas s'hauria d'assemblar a això:
private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
}
L'esdeveniment MouseUp utilitza un delegat anomenat MouseButtonEventHandler, el qual us subscriviu. Té dos paràmetres, un remitent (el control que crea l'esdeveniment) i un objecte MouseButtonEventArgs que contindrà informació útil. A l'exemple l'utilitzem per obtenir la posició del cursor de ratolí i informar l'usuari sobre aquesta.
Diversos esdeveniments poden fer servir el mateix delegat tipus - per exemple, tant MouseUp com MouseDown utilitzen el delegat MouseButtonEventHandler, mentre l'esdeveniment MouseMove utilitza el delegat MouseEventHandler. Quan definim el mètode manegador (handler) d'esdeveniments, necessiteu saber quin delegat el fa servir i si no sabeu, ho podeu mirar a la documentació.
Afortunadament, Visual Studio ens pot ajudar per generar el handler d'esdeveniments correcte per a un esdeveniment. El camí més fàcil de fer això és a senzillament escriure el nom del succés dins XAML i llavors deixar l'IntelliSense de VS fer la resta per vosaltres:
Quan seleccioneu <New Event Handler> Visual Studio generarà un handler d'esdeveniments apropiat al vostre fitxer de codi-associat. Serà anomenat <control name>_<event name>, al nostre cas pnlMainGrid_MouseDown. Feu click amb el botó dret i seleccioneu Navigate to Event Handler i VS us durà directament a aquest.
Subscriure a un succés des de codi
La manera més freqüent per a subscriure'ns als esdeveniments ja s'han explicat, però hi pot haver casos on voldrem subscriuren'ns a l'edeveniment directament des del codi-associat. Això es fa utilitzant la sintaxi += C#, on afegiu un handler d'esdeveniments directament en l'objecte. L'explicació completa d'això pertany a un exemple dedicat a C#, però per a comparar, aquí hi ha 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());
}
}
}
Un cop més, necessiteu saber quin delegat fer servir, i un cop més, Visual Studio et pot ajudar amb això. Tot just escrius:
pnlMainGrid.MouseDown +=
Visual Studio oferirà la seva assistència:
Simplement premeu la tecla [Tab] dos cops per a que Visual Studio generi el handler d'esdeveniments correcte per vosaltres, just a sota del mètode actual, preparat per a la implementació. Quan us subscriviu a esdeveniments d'aquesta manera, no necessiteu fer això al XAML.