آموزش WPF

مباحث پایه WPF

مثال های کاربردی WPF

بررسی Routed Event ها در WPF – آموزش WPF

تصویر wpf-routed-events_9287 بررسی Routed Event ها در WPF - آموزش WPF

بررسی Routed Event ها در WPF

در WPF رویداد Routed Event نوعی event است که می تواند علاوه بر شیء که آن را rise کرده، چندین هندلر را در listener های مختلف Invoke کنید. Routed Event ها سه نوع استراتژی اصلی مسیریابی دارند که در زیر مشاهده میکنید.

  • Direct Event
  • Bubbling Event
  • Tunnel Event

Direct Event

این نوع رویداد شبیه به رویدادهای Windows Forms است که توسط عنصری که صاحب آن رویداد است، Rise می شود. برخلاف یک رویداد استاندارد CLR، Direct Event ها قابلیت پشتیبانی از کلاس را دارند و همچین می توانند در Event Setter ها و یا Event Trigger ها استفاده شوند. برای مثال رویداد MouseEnter یک رویداد از نوع Direct Event است.

Bubbling Event

این نوع رویداد با عنصری که صاحب آن است آغاز می شود و سپس به بالاترین عنصر موجود در Visual Tree می رسد. در WPF به احتمال زیاد بالاتری عنصر در Visual Tree یک Window است.

Tunnel Event

این نوع رویداد در ریشه درخت عناصر invoke می شود و سپس در Visual Tree به سمت پایین حرکت می کند (یعنی عناصر فرزند را پیمایش می کند) و تا زمانی که به عنصر صاحب آن رویداد برسد.

تفاوت بین bubbling event و tunneling event در این است که tunneling event ها همیشه با یک Preview در ابتدای نام آن ها شروع می شوند. در WPF اکثر رویداد ها به صورت جفت tunneling/bubbling ایجاد شده اند. برای مثال در WPF هم رویداد PreviewMouseDown وجود دارد و هم رویداد MouseDown.

برای درک بهتر نحوه عملکرد Routed Event ها به مثال زیر توجه کنید که در آن سه عدد TextBlock به همراه یک Button قرار داده شده است.

کد سی شارپ مربوط به مثال:

زمانی که کد فوق را کامپایل و اجرا کنید خروجی زیر را مشاهده خواهید کرد.

تصویر wpf-routed-events_9287_1 بررسی Routed Event ها در WPF - آموزش WPF

و زمانی که بر روی دکمه کلیک کنید، خروجی برنامه به شکل زیر تغییر می کند.

تصویر wpf-routed-events_9287_2 بررسی Routed Event ها در WPF - آموزش WPF

اگر می خواهید از انتقال یک Routed Event جلوگیری کنید، کافیست از دستور e.Handled = true; استفاده کنید. برای مثال اگر بخواهیم جلوی انتقال رویداد را در StackPanel بگیریم، میتوانیم کد مربوط به آن را به شکل زیر تغییر دهیم.

حال اگر برنامه را دوباره اجرا و بر روی دکمه کلیک کنید، خروجی زیر را مشاهده خواهید کرد.

تصویر wpf-routed-events_9287_3 بررسی Routed Event ها در WPF - آموزش WPF

همانطور که مشاهده می کنید، متن مربوط به Window تغییر نکرده و این به معنی فراخوانی نشدن هندلر مربوط به Window است.

Routed Event های سفارشی

در WPF و .NET framework شما می توانید Routed Event های سفارشی مورد نیاز خود را ایجاد کنید. برای ایجاد Routed Event سفارشی باید مراحل زیر را انجام دهید.

  • ثبت رویداد سفارشی با استفاده از RegisterRoutedEvent
  • مشخص کردن استراتژی رویداد سفارشی (Bubble، Tunnel و یا Direct)
  • ایجاد یک هندلر برای رویداد سفارشی

برای درک بهتر نحوه ایجاد Routed Event سفارشی یک مثال ساده ایجاد می کنیم.

یک پروژه جدید از نوع WPF و با نام WPFCustomRoutedEvent ایجاد کنید سپس یک آیتم جدید از نوع Custom Control (WPF) به پروژه اضافه کرده و نام آن را MyCustomControl بگذارید.

تصویر wpf-routed-events_9287_4 بررسی Routed Event ها در WPF - آموزش WPF

بعد از انجام مراحل بالا دو فایل ThemesGeneric.xaml و MyCustomControl.cs به پروژه اضافه می شوند. حال فایل Generic.xaml را مانند نمونه زیر تغییر دهید تا ظاهر کنترل سفارشی ما ایجاد شود.

بعد از آن کد مربوط به فایل MyCustomControl را مانند نمونه زیر تغییر دهید.

سپس ظاهر پنجره اصلی را مانند نمونه زیر تغییر دهید.

و در نهایت یک هندلر برای کنترل و رویداد سفارشی ایجاد کنید.

اگر کد فوق را کامپایل و اجرا کنید، خروجی زیر را مشاهده خواهید کرد.

تصویر wpf-routed-events_9287_5 بررسی Routed Event ها در WPF - آموزش WPF

با کلیک بر روی کنترل سفارشی پیام زیر نمایش داده می شود که نشان دهنده کار کردن رویداد سفارشی است که ایجاد کردیم.

تصویر wpf-routed-events_9287_6 بررسی Routed Event ها در WPF - آموزش WPF

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است