معالجة الحدث في XAML

مكتمل

بعد إنشاء واجهة مستخدم XAML، يمكنك إضافة تعليمات برمجية للاستجابة للتفاعلات التي تحدث أثناء زيارة المستخدم للصفحة. يقوم .NET MAUI بإعلام تطبيق إدخال المستخدم والتفاعلات من خلال أحداث .NET القياسية.

في هذه الوحدة، ستتعلم كيفية التعامل مع هذه الأحداث وتنفيذ العمليات المتوقعة من قبل المستخدم.

تسمية العناصر في صفحة XAML

تحتاج التعليمات البرمجية لمعالجة الأحداث بشكل متكرر إلى الإشارة إلى عناصر تحكم معينة وخصائصها على صفحة. يمكنك تعيين اسم فريد لكل عنصر تحكم. للقيام بذلك، استخدم سمة x:NameXAML . تنفذ السمة x:Name أمرين:

  • يضيف حقلا خاصا إلى ملف التعليمات البرمجية في الخلف الذي تم إنشاؤه الذي تم تعيينه إلى هذا العنصر. استخدم هذا الحقل في التعليمات البرمجية للتفاعل مع العنصر المرئي لتعيين خصائص وقت التشغيل ومعالجة الأحداث.

  • يتم جعل العنصر معروفا ل XAML من خلال هذا الاسم. يمكنك الرجوع إلى هذه العناصر من عناصر أخرى معرّفة في ملف XAML نفسه.

لا يمكنك استخدام أي سلسلة إجبارية عند تسمية العنصر. يتم استخدام القيمة المعينة للسمة x:Name لإنشاء حقل في التعليمات البرمجية. بدلاً من ذلك، يجب أن يتطابق مع إصلاحات التسمية لمتغير معين. يجب أن يكون الاسم فريدًا لأنه تم تحويله برمجيًا إلى تعريف لتعليمة برمجية في الخلفية.

بعد توفير اسم لعنصر معين، يمكنك التفاعل مع هذا العنصر في ملف لتعليمات برمجية في الخلف. يعرف جزء XAML التالي عنصر Label تحكم. يسمى CounterLabel (يتم أخذ هذا المثال من التطبيق الافتراضي الذي ينشئه قالب .NET MAUI):

    <Label Text="Current count: 0"
        ...
        x:Name="CounterLabel"
        ... />

في التعليمات البرمجية الخلفية لهذه الصفحة، يمكنك الرجوع إلى عنصر التحكم هذا من خلال CounterLabel الحقل وتعديل خصائصه:

count++;
CounterLabel.Text = $"Current count: {count}";

هام

لن تتم تهيئة الحقل حتى InitializeComponent يتم تشغيل أسلوب الصفحة. هذا الأسلوب هو جزء من عملية تحليل XAML وإنشاء مثيل للكائنات. ضع أي تعليمة برمجية تتفاعل مع عنصر معرّف في XAML بعد هذا الاستدعاء. الاستثناء لهذه القاعدة هو ContentPage الفئة نفسها. يمكنك الوصول إلى كافة الخصائص في الفئة، قبل تنفيذ InitializeComponent الأسلوب. ومع ذلك، إذا قمت بتعيين أي خصائص على هذه الفئة في XAML، فستستبدل قيم الخصائص هذه أي قيم قد تكون قمت بتعيينها InitializeComponentقبل تنفيذ .

استخدام سمة لتحويل الأحداث

تعرض العديد من عناصر التحكم الخصائص التي تتوافق مع الأحداث التي يمكن أن تستجيب لها عناصر التحكم هذه، مثل Clicked الحدث لزر. تدعم عناصر التحكم المختلفة مجموعات مختلفة من الأحداث. على سبيل المثال، يمكن لعنصر التحكم الاستجابة لأحداث ClickedPressedو وReleased، بينما Entry يحتوي عنصر التحكم على أحداث مثل TextChanged.Button يمكنك تهيئة خاصية حدث في علامة XAML للصفحة، وتحديد اسم الأسلوب الذي سيتم تشغيله عند تشغيل الحدث. يجب أن يفي أسلوب الحدث بمتطلبات التوقيع التالية:

  • لا يمكن إرجاع قيمة؛ يجب أن يكون voidالأسلوب .
  • يجب أن يستغرق الأمر معلمتين؛ object مرجع يشير إلى الكائن الذي قام بتشغيل الحدث (المعروف باسم المرسل)، ومعلمة EventArgs تحتوي على أي وسيطات تم تمريرها إلى معالج الأحداث بواسطة المرسل.
  • يجب أن يكون privateمعالج الأحداث . لا يتم فرض هذا، ولكن إذا قمت بجعل معالج الأحداث عاما، فإنه يصبح متاحا للعالم الخارجي، ويمكن أن يستدعيه إجراء آخر غير الحدث المتوقع الذي يتم تشغيله.
  • يمكن أن يكون async معالج الأحداث إذا كان بحاجة إلى تشغيل عمليات غير متزامنة.

يوضح المثال التالي تعريف Clicked معالج الأحداث للزر في نموذج التطبيق من قالب .NET MAUI. يتبع اسم الأسلوب اصطلاحا قياسيا؛ متبوعا باسم عنصر التحكم (يسمى الزر عداد)، واسم الحدث (تم النقر فوقه). لا يتم فرض هذه الاصطلاحات، ولكنها ممارسة جيدة:

private void OnCounterClicked(object sender, EventArgs e)
{
    ...
}

الفصل بين Concerns

يعد توصيل الأحداث في XAML ملائما، ولكنه يخلط بين سلوك عنصر التحكم وتعريف واجهة المستخدم. يفضل العديد من المطورين الحفاظ على هذه العناصر مميزة والقيام بجميع اشتراكات معالج الأحداث في التعليمات البرمجية خلف العناصر المسماة. من الأسهل معرفة ما تم ربطه ومكان تعيين السلوك. يجعل هذا الأسلوب أيضا من الصعب قطع التعليمات البرمجية عن طريق الخطأ عن طريق إزالة معالج في XAML دون إدراكه. لن يلتقط المحول البرمجي معالجا تمت إزالته، ولن يظهر نفسه إلا كمشكلة عندما لا تنفذ التعليمات البرمجية هذا السلوك بشكل صحيح.

يعد اختيار توصيل معالجات الأحداث باستخدام XAML أو باستخدام التعليمات البرمجية مسألة اختيار شخصي.

لربط معالج حدث في التعليمات البرمجية += ، استخدم عامل التشغيل للاشتراك في الحدث. عادة ما تقوم بتنفيذ هذه العملية في الدالة الإنشائية للصفحة، بعد استدعاء إلى InitializeComponent:

public partial class MainPage : ContentPage, IPage
{
    public MainPage()
    {
        InitializeComponent();
        Counter.Clicked += OnCounterClicked;
    }

    ...

    private void OnCounterClicked(object sender, EventArgs e)
    {
        ...
    }
}

إشعار

يمكنك استخدام هذا الأسلوب للاشتراك في أساليب معالجة أحداث متعددة لنفس الحدث. يتم تشغيل كل أسلوب معالجة حدث عند حدوث الحدث، على الرغم من أنه لا يجب أن تفترض أنه سيتم تنفيذها بأي ترتيب معين، لذلك لا تقدم أي تبعيات بينها.

وبالمثل، يمكنك إزالة معالج أحداث عن طريق إلغاء الاشتراك منه من الحدث مع -= عامل التشغيل لاحقا في التطبيق الخاص بك:

Counter.Clicked -= OnCounterClicked;

اختبر معلوماتك

1.

ما هي المعلمات التي تم تمريرها إلى أسلوب معالجة الأحداث؟

2.

ما عامل التشغيل الذي يمكنك استخدامه لربط معالج الأحداث بحدث في C#؟