TOC

This article has been localized into Romanian by the community.

XAML:

Evenimente în XAML

Majoritatea arhitecturilor UI moderne sunt conduse de către evenimente și la fel e și WPF. Toate controalele, incluzând controlul Window (care de asemenea moștenește clasa Control) furnizează o gamă de evenimente la care te poți subscrie. Dacă te subscrii la aceste evenimente, înseamnă că aplicația te va notifica când acestea apar și poți să reacționezi la ele.

Există multe tipuri de evenimente, dar unele dintre cele mai folosite sunt cele ce răspund la interacțiunea utilizatorului cu aplicația, folosind mouse-ul sau tastatura. Pentru cele mai multe controale vei găsi evenimente precum KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp și multe altele.

Din moment ce acest subiect este unul complex, ne vom uita mai atent la cum funcționează evenimentele in WPF, dar pentru moment, ceea trebuie să știi cum sa legi un eveniment de control in XAML la o parte din codul tău din spate. Uită-te la acest exemplu:

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

Observă cum am subscris evenimentul MouseUp din Grid scriindu-i numele metodei. Această metodă trebuie să fie definită în codul din spate, folosind semnătura de eveniment corectă. În acest caz ar trebuie sa arate așa:

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

Evenimentul MouseUp utilizează un delegat numit MouseButtonEventHandler , la care vă abonați. Are doi parametri, un expeditor (controlul care a ridicat evenimentul) și un obiect MouseButtonEventArgs care va conține informații utile. Îl vom folosi în exemplul de mai jos pentru a obține poziția cursorului mouse-ului și a o comunica utilizatorului.

Mai multe evenimente pot folosi același tip de "delegate" (functii) - de exemplu, atât MouseUp, cât și MouseDown utilizează delegatul MouseButtonEventHandler , în timp ce evenimentul MouseMove utilizează delegatul MouseEventHandler . La definirea metodei de gestionare a evenimentelor, trebuie să știți care este delegatul pe care îl utilizează și dacă nu știți acest lucru, puteți să-l căutați în documentație.

Din fericire, Visual Studio ne poate ajuta să generăm un gestionar (handler) de eveniment corect pentru un eveniment. Cea mai ușoară modalitate de a face acest lucru este să scrieți numele evenimentului în XAML și apoi lăsați IntelliSense din VS să facă restul pentru dvs.:

Când selectați <New Event Handler> , Visual Studio va genera un handler de evenimente adecvat în fișierul Code-behind. Acesta va fi numit <control name>_& lt; name event> ;, în cazul nostru pnlMainGrid_MouseDown. Faceți clic dreapta pe numele evenimentului și selectați Navigați la Event Handler și VS vă va duce direct la acesta.

Abonarea la un eveniment de la codul din spate

Cea mai obișnuită modalitate de a vă abona la evenimente este explicată mai sus, dar pot exista momente în care doriți să vă abonați la eveniment direct din Code-behind. Aceasta se face folosind sintaxa + = C #, unde adăugați un handler de evenimente la eveniment direct pe obiect. Explicația completă a acestui fapt aparține unui exemplu dedicat C #, dar pentru comparație, iată un exemplu:

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

	}
}

Încă o dată, trebuie să știți ce delegat să utilizați și încă o dată, Visual Studio vă poate ajuta cu acest lucru. Imediat ce scrieți:

pnlMainGrid.MouseDown +=

Visual Studio va oferi asistenţă

Pur și simplu apăsați tasta [Tab] de două ori pentru ca Visual Studio să genereze pentru dvs. un handler corect pentru eveniment, chiar sub metoda curentă, pregătit pentru implementare. Când vă abonați la astfel de evenimente, nu este necesar să o faceți în XAML.