This article is currently in the process of being translated into Hungarian (~99% done).
Events in XAML
A legtöbb modern UI keretrendszer esemény-vezérelt, akárcsak a WPF. Minden vezérlő, beleértve a Window objektumot (ami szintén örökli a Control osztály tulajdonságait) felkínál nekünk számos eseményt, amire feliratkozhatunk. Ez azt jelenti, hogy az alkalmazásunk értesítést kap, ha valamely általunk figyelt esemény bekövetkezik, így képesek vagyunk reagálni rá.
Rengeteg féle esemény áll rendelkezésünkre, de a legtöbbet használt események azok, amelyeket a felhasználó interakciója vált ki az egér vagy a billentyűzet használatával. A legtöbb vezérlőn megtalálható a KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp és hasonló események.
Később közelebbről is megnézzük, hogy hogyan is működnek az események a WPF-ben, mivel ez egy összetett téma, de jelenleg annyit kell tudnod, hogy hogyan kapcsolhatod össze az eseményt a kódrészleteddel. Lássuk ezt a példát:
<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>
Figyeld meg, hogyan iratkoztunk fel a Grid MouseUp eseményére egy metódusnév megadásával. Ezt a metódust a code-behindban definiálni kell a megfelelő esemény paraméterlista használatával. A példában ennek a következőképpen kell kinéznie:
private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
}
A MouseUp esemény egy MouseButtonEventHandler nevű delegate-et használ, amire fel lehet iratkozni. Két parameter van: egy "sender" (küldő - az a vezérlő, ami kiváltotta az eseményt) és egy MouseButtonEventArgs objektum, ami további hasznos információkat tartalmaz. Ebben a példában arra használjuk, hogy megkapjuk az egérkurzor pozícióját és közöljük a felhasználóval.
Számos esemény használhatja ugyanazt a delegate típust - például a MouseUp és a MouseDown egyaránt a MouseButtonEventHandler delegate-et használják, míg a MouseMove esemény a MouseEventHandler delegate-et. Az eseménykezelő metódus definiálásánál tudnod kell, melyik delegate-et használja; amennyiben nem tudod, kikeresheted a dokumentációból.
Szerencsére a Visual Studio tud nekünk segíteni a megfelelő eseménykezelő generálásában. Erre a legegyszerűbb mód az, ha egyszerűen odaírjuk az esemény nevét az XAML-ben és a többit a VS IntelliSense-ére bízzuk:
Ha kiválasszuk a <New Event Handler>-t a Visual Studio legenerálja a szükséges esemény kezelőt a c# forráskódban. A Metódus elnevezése a következő: <vezérlő neve>_<esemény neve> ami esetünkben pnlMainGrid_MouseDown lesz. Az XAML-ben jobb gombot nyomva az esemény nevén és kiválasztva a 'Navigate to Event Handler'-t a VS át is vált a megfelelő c# metódusra.
Feliratkozás egy eseményre c# forrásból
A legegyszerűbb módszer feliratkozni egy eseményre a fent említett, de előfordulhat, hogy közvetlenül a c# forrásból szeretnék ezt megtenni. Ennek a szintaxisa : <vezérlő>.<esemény> += new <esemény kezelő>(<saját esemény kezelő metódus>). Vagyis direkt módon hozzáadjuk az esemény kezelőt az objektumhoz. A teljes magyarázat egy dedikált c# példában található, egyenlőre legyen itt egy egyszerű példa:
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());
}
}
}
Ismételten: tudnunk kell, hogy melyik delegáltat használjuk és megint csak, a Visual Studio ebben is segít, amint elkezdjük begépelni:
pnlMainGrid.MouseDown +=
A Visual Studio a következő segítséget ajánja fel:
Egyszerűen nyomjuk meg kétszer a [Tab] billentyűt, hogy a Visual Studio legenerálja a megfelelő esemény kezelőt és már kész is vagyunk. Ha így iratkozunk fel eseményekre, nem kell az XAML-el 'bajlódnunk' .