كيفية القيام بما يلي: إضافة معالجة الفئة لحدث مُوجَّه

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

مثال

يستخدم هذا المثال فئة مخصصة استناداً إلي لوحة Canvas. الأساس الفرضي للتطبيق هو أن تُقدم الفئة المخصصة السلوكيات على العناصر التابعة الخاصة بها بما في ذلك اعتراض‬ أي نقرات على زر الماوس الأيسر و وضع عليها علامة معالجة, قبل استدعاء فئة العنصر التابع أو أية معالجات مثيل عليه.

فئة UIElement تكشف أسلوب ظاهري يمكّن معالجة الفئة على حدث PreviewMouseLeftButtonDown بواسطة تجاوز الحدث. هذا هو أبسط طريقة لتنفيذ معالجة الفئة إذا كان أسلوب الظاهري متوفر في مكان ما في التسلسل الهرمي في الفئة الخاصة بك. تُظهر التعليمات البرمجية التالية تنفيذOnPreviewMouseLeftButtonDown في "MyEditContainer" المشتق من Canvas. التطبيق يضع علامة على الحدث كما تتم معالجته في الوسائط و ثم يقوم بإضافة بعض التعليمات البرمجية لإعطاء العنصر المصدر تغيير مرئي أساسي.

protected override void OnPreviewMouseRightButtonDown(System.Windows.Input.MouseButtonEventArgs e)
{
    e.Handled = true; //suppress the click event and other leftmousebuttondown responders
    MyEditContainer ec = (MyEditContainer)e.Source;
    if (ec.EditState)
    { ec.EditState = false; }
    else
    { ec.EditState = true; }
    base.OnPreviewMouseRightButtonDown(e);
}

إذا كان الظاهري غير متوفر على الفئات الأساسية أو لهذا الأسلوب المعين, يمكن إضافة معالجة الفئة مباشرة باستخدام أسلوب الأداة المساعدة لفئة EventManager, RegisterClassHandler. هذا الأسلوب يجب استدعائه فقط داخل التهيئة الثابتة للفئات التي تقوم بإضافة معالجة الفئة. يضيف هذا المثال معالج آخر لهذا PreviewMouseLeftButtonDown ، و في هذا الحالة الفئة المسجلة هي فئة مخصصة. وفي المقابل، عند استخدام الظاهري ، الفئة المسجلة هي فعلاً فئة UIElement الأساسية. في الحالات حيث يسجل كل من الفئات الأساسية و الفرعية فئة معالجة يتم استدعاء معالجات الفئة الفرعية أولاً. السلوك في التطبيق سيكون أن أولاً يظهر المعالج مربع رسالة الخاص به ومن ثم التغيير المرئي في معالج أسلوب الظاهري سيظهر.

static MyEditContainer()
{
  EventManager.RegisterClassHandler(typeof(MyEditContainer), PreviewMouseRightButtonDownEvent, new RoutedEventHandler(LocalOnMouseRightButtonDown));
}
internal static void LocalOnMouseRightButtonDown(object sender, RoutedEventArgs e)
{
  MessageBox.Show("this is invoked before the On* class handler on UIElement");
  //e.Handled = true; //uncommenting this would cause ONLY the subclass' class handler to respond
}

راجع أيضًا:

المهام

كيفية القيام بما يلي: معالجة حدث موجًّه‬

المرجع

EventManager

المبادئ

وضع علامة على توجيه الأحداث كمعالجة و معالجة الفئة

نظرة عامة حول الأحداث الموجهة