TOC

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

XAML:

Događaji u "ZAMEL"-u

Mnogi moderni korisnički interfejsi su pokretani događajima pa je tako i "WPF". Sve kontrole, uključujući i "Window" (koji takođe nasleđuje klasu "Controls") ističe niz događaja na koje možete da se pretplatite. Vi možete da se pretplatite na te događaje što znači da će vašoj aplikaciji biti javljeno kada se oni dogode i vi možete da odgovorite na njih.

Postoji mnogo tipova događaja, ali najviše korišćeni su oni koji odgovaraju na korisnikovu interakciju sa vašom aplikacijom koristeći miša ili tastaturu. U mnogim kontrolama naći ćete događaje kao što su "Dugme dole" (dugme je pritisnuto), "Dugme gore" (dugme je otpušteno), "Miš dole", "Miš ulazi" (tačnije kurzor ulazi na kontrolu), "Miš izlazi" (i ovde je tačnije da miš izlazi sa kontrole), "Miš gore" i još dosta drugih.

Mi ćemo detaljnije da vidimo kako događaji rade u "WPF"-u pošto je to kompleksna oblast, ali za sada je potrebno da znate kako da povežete događaj iz kontrole u "XAML"-u ("ZAMEL-u") sa delom vašeg koda u fajlu nazvanom "Kod iza" (odvojenom od koda u "ZAMEL" fajlu). Pogledajte ovaj primer:

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

Primetite kako smo se pretplatili na događaj mreže "MouseUp" pomoću davanja imena metodu. Ovaj metod treba definisati u kodu iza, koristeći tačan potpis događaja. U ovom slučaju to bi trebalo da izgleda ovako:

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

Događaj "MouseUp" koristi delegata pod nazivom MouseButtonEventHandler koji bismo mogli da prevedemo kao "Rukovalac događajem dugmeta miša" a na koji ste pretplaćeni. Delegat ima dva parametra: "sender" odn. "pošiljalac" a to je kontrola koja je pokrenula događaj i objekat "MouseButtonEventArgs" odn. "Argumenti (podaci) događaja dugmeta miša" koji će sadržati korisne informacije. Koristimo ga u primeru da bismo dobili položaj kursora miša (koordinate) i to saopštili korisniku.

Nekoliko događaja može koristiti isti tip delegata - na primer i "MouseUp" i "MouseDovn" koriste delegat MouseButtonEventHandler , dok događaj "MouseMove" koristi delegat MouseEventHandler . Kada definišete metod obrade događaja, morate da znate kog delegata on koristi, a ako to ne znate, možete to potražiti u dokumentaciji.

Srećom, "Visual Studio" nam može pomoći da generišemo ispravnog rukovaoca događajem za događaj. Najlakši način da to uradite je da jednostavno napišete naziv događaja u "ZAMEL"-u, a zatim pustite da "IntelliSense" u VS uradi sve ostalo za vas:

Kada odaberete <New Event Handler> "Visual Studio" će generisati odgovarajući rukovalac događaja u vašoj datoteci "Kod iza". Nazvaće ga <control name>_<event name> odn. "ime kontrole_ime događaja" a u našem slučaju je to pnlMainGrid_MouseDown - "pnlGlavnaMreža_MišDole". Ako kliknite desnim tasterom miša na naziv događaja i izaberete Navigate to Event Handler - "Odvedi me do rukovaoca događajem" "VS" će vas odvesti pravo do njega.

Pretplaćivanje na događaje iz fajla "Kod iza"

Najčešći način pretplate na događaje je već objašnjen ali možda umesto toga želite da se pretplatite na događaj direktno iz fajla "Kod iza". To se radi pomoću "C# (CIS)" sintakse jezika: "+ =" gde rukovaoca događajem dodajete direktno u objektu. Potpuno objašnjenje ovoga načina bilo bi u nekom namenskom primeru "C#"-a, ali za poređenje, evo primera:

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

	}
}

Još jednom: treba da znate kog delegata da koristite i opet "Visual Studio" može da vam pomogne. Čim napišete:

"pnlMainGrid.MouseDown +="

"Visual Studio" će vam ponuditi pomoć:

Jednostavno pritisnite taster [Tab] dva puta da "Visual Studio" generiše odgovarajućeg rukovaoca događajem za vas, odmah ispod trenutne metode ("public EventsSample()" ili na drugom mestu u editoru - potražite) koji je spreman za upotrebu. Kada se pretplatite na događaje na ovaj način ne morate to da radite u "ZAMEL"-u.