TOC

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

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 استفاده میکند. زمانی که متدی را برای مدیریت کننده رویداد تنظیم میکنید ، باید بدانید که کدام دلیگیت مورد استفاده قرار میگیرد و اگر نمیدانید میتوانید به documentation مراجعه کنید

خوشبختانه ، ویژوال استودیو میتواند برای ساخت یک مدیریت کننده رویداد به ما کمک کند. آسانترین راه برای انجام این کار اینست که به سادگی نام رویداد رو در 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 انجام دهید

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!