TOC

This article has been localized into Persian by the community.

XAML:

رویداد ها در XAML

بیشتر فریمورک های مدرن رابط کاربری بوسیله رویداد ها (event) اجرا میشوند مثل WPF. همه کنترل ها ، همچنین خود پنجره برنامه (که از کلاس کنترل ارث بری شده) تعدادی رویداد ارائه میدهند که شما میتوانید مشترک آنها شوید. شما میتوانید مشترک رویدادها شوید به معنای اینست که نرم افزار شما متوجه میوشد وقتی یکی از آن رویدادها اجرا شدو شما میتوانید به آن پاسخ دهید

انواع مختلفی از رویدادها وجود دارد، اما تعدادی از مورد استفاده ترین آنها به کارهایی که کاربر بوسیله موس و کیبورد با نرم افزار شما انجام میدهد پاسخ می دهند. در بیشتر کنترل ها شما رویداد هایی مثل KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp و تعداد دیگری پیدا میکنید

ما نگاه نزدیک تری به اینکه چگونه رویداد ها در WPF کار میکنند خواهیم انداخت، از آنجا که این مبحث پیچیده ای است، شما فعلا نیاز دارید که نحوه اتصال رویداد یک کنترل به بخشی از کدی که داخل کدپشتی (کدی که به فایل XAML وصل است) نوشته شده را بدانید. به این مثال نگاه کنید:

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

متوجه شدید که ما چطور با نوشتن نام متد، گوش بزنگ رویداد MouseUp از کنترل گرید(Grid) شدیم. این متد باید در کد-پشتی با استفاده از روش صحیح نوشتن رویداد، نوشته شده باشد. در این مورد باید به این صورت پیاده شود

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

رویداد MouseUp از دلیگیتی به نام MouseButtonEventHandler استفاده میکند، که دارای دو پارامتر است یک sender (کنترلی که رویداد را فرامیخواند) و یک شیء MouseButtonEventArgs که شامل اطلاعات کاربردیی است. ما از این در مثال استفاده میکنیم تا محل نشانگر موس را بدست آوریم و به یوزر در مورد آن بگوییم

ممکن است چندین رویداد از یک نوع دلیگیت استفاده کنند - برای مثال هر دو رویداد MouseUp و MouseDown از MouseButtonEventHandler استفاده میکنند. در حالی که MouseMove از MouseEventHandler استفاده میکند. زمانی که متدی را برای مدیریت کننده رویداد تنظیم میکنید، باید بدانید که کدام دلیگیت مورد استفاده قرار میگیرد و اگر نمیدانید میتوانید به مستندات مراجعه کنید.

خوشبختانه ، ویژوال استودیو میتواند برای ساخت یک مدیریت کننده رویداد به ما کمک کند. آسانترین راه برای انجام این کار اینست که به سادگی نام رویداد رو در XAML بنویسید و بعد اجازه دهید که IntelliSense (پیش بینی کننده کد) مابقی کار را برای شما انجام دهد

زمانی که <New Event Handler> را انتخاب می کنید ویژوال استودیو یک ک Event Handler در قسمت کد ایجاد می کند. و نام آن <control name>_< خواهد بود و در برنامه ما pnlMainGrid_MouseDown است. درevent name کلیک راست کرده و گزینه Navigate to Event Handler را انتخاب کنید ویژوال استودیو شما را به همان جا می برد.

گوش بزنگ شدن در یک رویداد از طریق کد-پشتی

مورد استفاده ترین روش گوش بزنگ شدن در یک رویداد قبلا توضیح داده شد، اما ممکن است زمان هایی هم باشد که شما بخواهید از طریق کد-پشتی از یک رویداد مطلع شوید. بوسیله علامت += در سی شارپ مدیریت کننده رویداد (event handler) مستقیما از داخل آبجکت به رویداد اضافه میشود. توضیح کامل این مثال به آموزش سی شارپ اختصاص پیدا میکند، اما اینجا یک مثال برای مقایسه آورده شده:

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

	}
}

دوباره میگم، شما باید بدانید که از کدام دلیگیت استفاده کنید، و بار دیگر، ویژوال استودیو در این کار به شما کمک میکند. به محض این که بنویسید

pnlMainGrid.MouseDown+=

ویژوال استودیو راهنمای خودش رو پیشنهاد میدهد:

به سادگی دکمه [Tab] را دوبار بفشارید تا ویژوال استودیو مدیریت کننده رویداد صحیح را برای شما تولید کند، دقیقا زیر متد فعلی، برای پیاده سازی آماده است. وقتی شما به این صورت مشترک یک رویداد میشوید، دیگر نیازی نیست این کار را در XAML انجام دهید