TOC

This article is currently in the process of being translated into Afrikaans (~53% done).

XAML:

Events in XAML

Die meeste moderne UI raamwerke, en so ook WPF, word gedryf deur gebeure. Al die kontroles, insluitend die "Window" (wat ook die Control class erf) stel n reeks gebeure bloot, waaraan daar ingeteken kan word. Jy kan inteken aan die gebeure, wat beteken dat jou program in kennis gestel word wanneer die gebeure plaasvind, en dan kan reageer op die gebeure.

Daar is baie tipes gebeure. Van die mees algemeenste is daar om te reageer op die gebruiker se interaksie met jou applikasie, deur die muis of sleutelbord. Op die meeste kontrole sal jy gebeure vind soos KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp, en verskeie ander.

Ons sal weldra nader ondersoek instel na hoe gebeure werk in WPF, want dit is 'n ingewikkelde onderwerp. Huidiglik moet jy weet hoe om 'n kontrole gebeurte in XAML te skakel na 'n stukkie kode in jou kode leêr. Kyk na hierdie voorbeeld:

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

Let op hoe ons intgeten het aan die MouseUp gebeurte van die Grid kontrole deur 'n metode naam te skryf. Hierdie metode moet in die kode leêr gedefinieër word, met die korrekte metode kenmerking. In hierdie geval behoort dit so te lyk:

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

Die MouseUp gebeurte gebruik 'n afgevaardige genaamd MouseButtonEventHandle, waarop jy inteken. Dit het twee parameters, 'n sender (die kontrole wat die gebeurte produseer) en 'n MouseButtonEventArgs objek wat handige informasie bevat. In die voorbeeld gebruik ons dit om die posisie van die muis pyltjie te kry, en om die gebruiker daarvan te vertel.

Verskeie gebeurtes mag dieselfde afgevaardigde tipe gebruik. Beide MouseUp en MouseDown gebruik byvoorveeld die MouseButtonEventHandler afgevaardigde, terwyl die MouseMove gebeurte die MouseEventHandler afgevaarigde gebruik. Wanneer jy die gebeurte hanteerder metode definieër, moet jy weet watter afgevaardigde dit gebruik. Indien jy nie weet nie, kan jy dit in die dokumentasie opsoek.

Fortunately, Visual Studio can help us to generate a correct event handler for an event. The easiest way to do this is to simply write the name of the event in XAML and then let the IntelliSense of VS do the rest for you:

When you select <New Event Handler> Visual Studio will generate an appropriate event handler in your Code-behind file. It will be named <control name>_<event name>, in our case pnlMainGrid_MouseDown. Right-click in the event name and select Navigate to Event Handler and VS will take you right to it.

Subscribing to an event from Code-behind

The most common way to subscribe to events is explained above, but there may be times where you want to subscribe to the event directly from Code-behind instead. This is done using the += C# syntax, where you add an event handler to event directly on the object. The full explanation of this belongs in a dedicated C# example, but for comparison, here's an example:

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());
		}

	}
}

Once again, you need to know which delegate to use, and once again, Visual Studio can help you with this. As soon as you write:

pnlMainGrid.MouseDown +=

Visual Studio will offer its assistance:

Simply press the [Tab] key twice to have Visual Studio generate the correct event handler for you, right below the current method, ready for implementation. When you subscribe to the events like this, you don't need to do it in XAML.