TOC

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

XAML:

Events in XAML

Ko'pgina zamonaviy GUI ramkalari (shu jumladan WPF) voqealarga asoslangan. Barcha boshqaruv elementlari, shu jumladan Oyna (Boshqarish sinfini meros qilib olgan) o'chirilishi mumkin bo'lgan ko'plab turli hodisalarni qo'llab-quvvatlaydi. Siz ushbu voqealarga "obuna bo'lishingiz" mumkin, natijada, voqealar sodir bo'lganda dasturga xabar beriladi va siz ularga munosabat bildirishingiz mumkin.

Har xil turdagi hodisalar mavjud, lekin eng ko'p ishlatiladiganlaridan biri sichqoncha yoki klaviatura yordamida foydalanuvchining ilova bilan o'zaro munosabatiga javob beradigan hodisalardir. Aksariyat boshqaruv elementlari quyidagi kabi hodisalarni boshqarishi mumkin: KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp va boshqalar.

Biz voqealarning WPF da qanday ishlashini batafsil ko‘rib chiqamiz, chunki bu mavzu murakkab, lekin birinchi navbatda XAMLdagi boshqaruv hodisasini CodeBehind’dagi mantiqqa qanday bog‘lashni bilishingiz kerak. Ushbu misolni ko'rib chiqing:

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

Grid elementining MouseUp hodisasiga qanday qilib "obuna bo'lganimizga" e'tibor bering (usul nomini kiriting). Ushbu usul qoidalarga muvofiq CodeBehind da aniqlanishi kerak. Bunday holda, usul ta'rifi quyidagicha ko'rinadi:

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

Siz "obuna" bo'lgan MouseUp hodisasi MouseButtonEventHandler delegatidan foydalanadi . U ikkita kirish parametrini o'z ichiga oladi: jo'natuvchi ("yuboruvchi", hodisaga munosabat bildirgan element) va MouseButtonEventArgs ob'ekti (u foydali ma'lumotlarni o'z ichiga oladi). Biz ushbu ob'ektdan sichqoncha kursorining o'rnini olish va bu ma'lumotlarni foydalanuvchiga uzatish uchun foydalandik.

Bir nechta hodisalar bir xil turdagi delegatlardan foydalanishi mumkin, masalan, MouseUp va MouseDown hodisalari MouseButtonEventHandler delegatidan foydalanadi , MouseMove hodisasi esa MouseEventHandler dan foydalanadi . Hodisa ishlov berish usulini aniqlaganingizda, u qaysi delegatdan foydalanishini bilishingiz kerak. Agar buni bilmasangiz, hujjatlarga qarang.

Yaxshiyamki, Visual Studio avtomatik ravishda kerakli hodisa ishlov beruvchisini yaratish orqali bizga yordam berishi mumkin. Buni amalga oshirishning eng oson yo'li - XAML-da hodisa nomini aniqlash va IntelliSense (Visual Studio'ning avtomatik to'ldirish tizimi) siz uchun ishni bajarishiga ruxsat berishdir:

<New Event Handler> tanlanganda, Visual Studio CodeBehind-da tegishli hodisa ishlov beruvchisini yaratadi. U <nazorat nomi>_<voqea nomi>, deb nomlanadi, sizning holatingizda pnlMainGrid_MouseDown. Hodisa nomini sichqonchaning o'ng tugmasi bilan bosish va Navigate to Event Handlerga o'tish-ni tanlash orqali Visual Studio CodeBehind -da voqea ishlov beruvchisini ochadi.

CodeBehind-dagi eventga obuna bo'ling

Hodisalarga obuna bo'lishning eng keng tarqalgan usuli yuqorida keltirilgan, ammo siz buni to'g'ridan-to'g'ri kodda amalga oshirishni xohlashingiz mumkin. Buni C# += operatori yordamida amalga oshirish mumkin, bu esa ob'ektga hodisa ishlov beruvchisini qo'shadi. Ushbu funksiyaning batafsil tushuntirishi biriktirilgan C# qo'llanmasida keltirilgan, ammo taqqoslash uchun kichik bir misolni ko'rib chiqing:

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

	}
}

Shunga qaramay, qaysi delegat turini ishlatishni bilishingiz kerak yoki Visual Studio maslahatidan foydalanishingiz mumkin. Bir marta yozsangiz:

pnlMainGrid.MouseDown +=

Visual Studio quyidagi so'rovni ko'rsatadi:

Visual Studio to'g'ri hodisa ishlov beruvchisini yaratib, funksiyani amalga oshirishga tayyor qilish uchun Tab tugmasini ikki marta bosing. Elementlarni hodisalarga shu tarzda obuna bo'lganingizda, XAMLda buni qilishning hojati yo'q.