TOC

This article has been localized into Slovak by the community.

XAML:

Udalosti v XAML

Väčšina moderných frameworkov je riadená udalosťami a tak je to aj vo WPF. Všetky ovládacie prvky vrátane okna (ktoré tiež dedí triedu Control) vystavujú celý rad udalostí, na ktoré sa môžete prihlásiť. Môžete sa prihlásiť na odber týchto udalostí, čo znamená, že vaša aplikácia bude upovedomená, keď sa vyskytnú a môžete na ne reagovať.

Existuje veľa typov udalostí, ale najčastejšie používané sú tie, ktoré reagujú na interakciu užívateľa s aplikáciou pomocou myši alebo klávesnice. Vo väčšine ovládacích prvkov nájdete udalosti ako KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp a niekoľko ďalších.

Pozrime sa podrobnejšie na to, ako fungujú udalosti vo WPF, pretože ide o zložitú tému, ale nateraz potrebujete vedieť, ako prepojiť riadiacu udalosť v XAML, s kódom vo vašom súbore Code-behind. Pozrite sa na tento príklad:

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

Všimnite si, ako sme sa prihlásili k udalosti MouseUp v kontrolke Grid napísaním názvu metódy. Táto metóda musí byť definovaná v kóde (code-behind) použitím správnej signatúry udalosti. V tomto prípade by mala vyzerať takto:

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

Udalosť MouseUp používa delegáta s názvom MouseButtonEventHandler, na ktorý sa prihlasujete. Má dva parametre: odosielateľ (ovládací prvok, ktorý vyvolal udalosť) a objekt MouseButtonEventArgs, ktorý bude obsahovať užitočné informácie. Používame ho napríklad na získanie pozície kurzora myši a informujeme o tom užívateľa.

Niektoré udalosti môžu používať rovnaký typ delegáta - napríklad MouseUp a MouseDown používajú delegáta MouseButtonEventHandler, kým udalosť MouseMove používa delegáta MouseEventHandler. Pri definovaní metódy obsluhy udalosti musíte vedieť, ktorý delegát používa, a ak to neviete, môžete si to pozrieť v dokumentácii.

Našťastie nám program Visual Studio môže pomôcť vygenerovať správny obslužný program udalosti. Najjednoduchší spôsob, ako to urobiť, je jednoducho napísať názov udalosti v XAML a nechať "IntelliSense" vo VS urobiť zvyšok za vás:

Keď vyberiete <New Handler Handler>Visual Studio vygeneruje príslušný popisovač udalostí vo vašom súbore Code-behind. Bude nazvaný <control name>_<event name> v našom prípade pnlMainGrid_MouseDown. Kliknite pravým tlačidlom myši na názov udalosti a vyberte položku Navigate to Event Handler a VS vás presmeruje.

Prihlásenie sa na udalosť z Code-behind

Najčastejšou cestou na prihlásenie sa na udalosť je vysvetlené vyššie, ale môžu sa vyskytnúť prípady, kedy sa chcete prihlásiť k udalosti priamo z kódu v Code-behind. Vykonáte to pomocou += syntaxe C#, kde pridáte obslužnú rutinu udalosti priamo na daný objekt. Úplné vysvetlenie tejto skutočnosti patrí do príkladu C#, ale na porovnanie, tu je príklad:

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

	}
}

Znova je potrebné vedieť, ktorý delegát používať, a opäť, Visual Studio vám s tým môže pomôcť. Akonáhle píšete:

pnlMainGrid.MouseDown +=

Visual Studio ponúkne pomoc:

Jednoducho stlačte tlačidlo [Tab] dvakrát, aby Visual Studio vygenerovalo správny obslužný program udalosti. Keď sa prihlásite na udalosť, ako je táto, nemusíte to robiť v XAML.