TOC

This article has been localized into Arabic by the community.

XAML:

الأحداث في XAML

معظم اطر عمل واجهات المستخدم موجهة باستخدام الأحداث وكذلك هي 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 بكتابة اسم الوظيفة (method name). هذه الوظيفة يجب تعريفها في ملف الكود، باستخدام قالب الحدث الصحيح. في هذه الحالة يجب أن يبدو مثل هذا:

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> سوف يقوم فيجوال ستيديو بتوليد مستلم الاحداث في الملف الكودي المصدري. سوف يتم تسميتة ب <control name>_<event name>, في حالتنا pnlMainGrid_MouseDown. بالضغط بزر الماوس اليمين علي اسم الحدث و اختيار Navigate to Event Handler سوف يذهب VS مباشرة الي الكود المصدري الخاص بمعالجة الامر

الاشتراك في حدث من الكود الخلفي

اكثر الطرق الشائعة في الاشتراك في الاحداث هي الموضحة بالاعلى, ولكن هنالك بعض الاوقات التي قد تريد الاشتراك في حدث مباشرة من الكود الخلفي. وهذا يحدث بأستخدام تركيب += C#, حيث تقوم باضافة معالج الحدث مباشرة الى الكائن. التوضيح الكامل يعود الى امثلة C# المخصصة, ولكن للمقارنة, اليك بمثال:

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.