Bagikan melalui


Peristiwa Pratinjau

Peristiwa pratinjau, juga dikenal sebagai peristiwa penerowongan, adalah peristiwa yang dirutekan di mana arah rute melakukan perjalanan dari akar aplikasi ke elemen yang menaikkan peristiwa dan dilaporkan sebagai sumber dalam data peristiwa. Tidak semua skenario peristiwa mendukung atau memerlukan peristiwa pratinjau; topik ini menjelaskan situasi di mana peristiwa pratinjau ada, bagaimana aplikasi atau komponen harus menanganinya, dan kasus di mana membuat peristiwa pratinjau di komponen atau kelas kustom mungkin sesuai.

Pratinjau Peristiwa dan Input

Saat Anda menangani peristiwa Pratinjau secara umum, berhati-hatilah dengan menandai peristiwa yang ditangani dalam data peristiwa. Menangani peristiwa Pratinjau pada elemen apa pun selain elemen yang menaikkannya (elemen yang dilaporkan sebagai sumber dalam data peristiwa) memiliki efek tidak memberikan elemen kesempatan untuk menangani peristiwa asalnya. Terkadang ini adalah hasil yang diinginkan, terutama jika elemen yang dimaksud ada dalam hubungan dalam penggubahan kontrol.

Untuk peristiwa input secara khusus, Peristiwa pratinjau juga berbagi instans data peristiwa dengan peristiwa gelembung yang setara. Jika Anda menggunakan penanganan kelas peristiwa Pratinjau untuk menandai peristiwa input yang ditangani, penanganan kelas peristiwa input gelembung tidak akan dipanggil. Atau, jika Anda menggunakan handler instans peristiwa Pratinjau untuk menandai peristiwa yang ditangani, handler untuk peristiwa gelembung biasanya tidak akan dipanggil. Handler kelas atau handler instans dapat didaftarkan atau dilampirkan dengan opsi untuk dipanggil bahkan jika peristiwa ditandai ditangani, tetapi teknik tersebut tidak umum digunakan.

Untuk informasi selengkapnya tentang penanganan kelas dan kaitannya dengan peristiwa Pratinjau, lihat Menandai Peristiwa Yang Dirutekan sebagai Ditangani, dan Penanganan Kelas.

Mengatasi Penekanan Peristiwa berdasarkan Kontrol

Salah satu skenario di mana peristiwa Pratinjau umumnya digunakan adalah untuk penanganan kontrol yang disusupi dari peristiwa input. Terkadang, penulis kontrol menekan peristiwa tertentu dari berasal dari kontrol mereka, mungkin untuk mengganti peristiwa yang ditentukan komponen yang membawa lebih banyak informasi atau menyiratkan perilaku yang lebih spesifik. Misalnya, Windows Presentation Foundation (WPF) Button menekan MouseLeftButtonDown dan MouseRightButtonDown menggelegak peristiwa yang diangkat oleh Button atau elemen kompositnya untuk menangkap mouse dan meningkatkan Click peristiwa yang selalu dibangkitkan oleh Button itu sendiri. Peristiwa dan datanya masih berlanjut di sepanjang rute, tetapi karena Button menandai data peristiwa sebagai Handled, hanya penangan untuk peristiwa yang secara khusus menunjukkan bahwa mereka harus bertindak dalam handledEventsToo kasus dipanggil. Jika elemen lain menuju akar aplikasi Anda masih menginginkan kesempatan untuk menangani peristiwa yang ditekan kontrol, salah satu alternatifnya adalah melampirkan handler dalam kode dengan handledEventsToo ditentukan sebagai true. Tetapi seringkali teknik yang lebih sederhana adalah mengubah arah perutean yang Anda tangani menjadi Pratinjau yang setara dengan peristiwa input. Misalnya, jika kontrol menekan MouseLeftButtonDown, coba lampirkan handler sebagai PreviewMouseLeftButtonDown gantinya. Teknik ini hanya berfungsi untuk peristiwa input elemen dasar seperti MouseLeftButtonDown. Peristiwa input ini menggunakan pasangan terowongan/gelembung, menaikkan kedua peristiwa, dan berbagi data peristiwa.

Masing-masing teknik ini memiliki efek samping atau batasan. Efek samping dari menangani peristiwa Pratinjau adalah bahwa menangani peristiwa pada saat itu mungkin menonaktifkan penangan yang mengharapkan untuk menangani peristiwa gelembung, dan oleh karena itu batasannya adalah bahwa biasanya bukan ide yang baik untuk menandai peristiwa yang ditangani saat masih pada bagian Pratinjau dari rute. Batasan handledEventsToo teknik adalah Anda tidak dapat menentukan handledEventsToo handler di XAML sebagai atribut, Anda harus mendaftarkan penanganan aktivitas dalam kode setelah mendapatkan referensi objek ke elemen tempat handler akan dilampirkan.

Baca juga