Acara penanganan

Urutan penanganan acara

Sitemap Toolkit mirip dengan UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
. Ketika peristiwa terjadi, itu dikirim sepanjang jalur perambatan di pohon elemen visual. Acara ini tidak hanya dikirim ke elemen visual target, tetapi untuk semua elemen di jalur perambatan.HTML Sitemap. When an event occurs, it’s sent along the propagation path in the visual element tree. The event isn’t only sent to the target visual element, but to all elements within the propagation path.

Urutan penanganan acara adalah sebagai berikut:

  1. trickle-down phase of the dispatch process.
  2. Panggilan acara yang indah pada target acara. Ini adalah target phase dari proses pengiriman.
  3. Call ExecuteDefaultActionAtTarget() pada target acara.
  4. Panggilan acara yang indah pada elemen dari target acara orang tua ke akar. Ini adalah bubble-up phase dari proses pengiriman.
  5. ExecuteDefaultAction() on the event target.

Sebagai acara bergerak di sepanjang jalur perambatan, pembaruan properti Event.currentTarget ke elemen saat ini menangani acara. Dalam fungsi callback acara:

  • Event.currentTarget is the visual element that the callback registers on.
  • Event.target is the visual element where the original event occurs.

Untuk informasi lebih lanjut, lihat .

Mendaftar panggilan acara

Mendaftar callback acara memungkinkan Anda menyesuaikan perilaku instance individu dari kelas yang ada, seperti bereaksi pada mouse klik pada label teks.

  • Setelah selama tahap trikle-down.
  • Setelah selama fase gelembung-up.

Secara default, eksekusi callback terdaftar selama fase target dan fase bubble-up. Perilaku default ini memastikan bahwa elemen induk bereaksi setelah elemen anaknya. Misalnya, jika Anda ingin elemen induk untuk bereaksi sebelum anaknya, mendaftarkan panggilan Anda dengan opsi TrickleDown.TrickleDown:

// Register a callback for the trickle-down phase
myElement.RegisterCallback<MouseDownEvent>(MyCallback, TrickleDown.TrickleDown);

Ini menginformasikan pengiriman untuk mengeksekusi callback pada fase target dan fase trik.

Untuk menambahkan perilaku khusus ke elemen visual tertentu, Anda harus mendaftarkan callback acara pada elemen tersebut. Misalnya, kode berikut mendaftarkan callback untuk MouseDownEvent:

// Register a callback on a mouse down event
myElement.RegisterCallback<MouseDownEvent>(MyCallback);

Tanda tangan panggilan Anda harus terlihat seperti ini:

void MyCallback(MouseDownEvent evt) { /* ... */ }

Anda dapat mendaftarkan beberapa callback untuk acara. Anda hanya dapat mendaftarkan fungsi callback yang sama pada acara dan fase perambatan yang sama sekali. Untuk menghapus callback dari metode VisualElement, sebut metode myElement.UnregisterCallback().

Menambahkan data kustom ke callback acara

Anda dapat mengirim data kustom bersama dengan callback ke acara. Untuk melampirkan data kustom, Anda harus memperpanjang panggilan untuk mendaftarkan panggilan kembali.

Kode berikut mendaftarkan callback untuk MouseDownEvent dan mengirim data kustom ke fungsi callback:

// Send user data along to the callback
myElement.RegisterCallback<MouseDownEvent, MyType>(MyCallbackWithData, myData);

Fungsi callback harus mengembalikan tanda tangan ini:

void MyCallbackWithData(MouseDownEvent evt, MyType data) { /* ... */ }

Menjawab acara dengan kontrol kustom

Jika Anda menerapkan kontrol kustom, Anda dapat menanggapi acara UI Toolkit dalam dua cara:

  • Mendaftar panggilan acara.
  • Menerapkan tindakan default.

Bagaimana Anda memilih untuk menanggapi peristiwa tergantung pada situasi.

Perbedaan antara callback dan tindakan default adalah:

  • Callbacks harus mendaftar pada contoh kelas. Tindakan default dijalankan sebagai fungsi virtual pada kelas.
  • Callbacks mengeksekusi semua elemen visual di jalur perambatan. Tindakan default hanya berlaku untuk target acara.
  • Callbacks mungkin melakukan pemeriksaan tambahan untuk menentukan apakah mereka harus bereaksi terhadap suatu acara. Misalnya, penanganan panggilan kembali mouse klik mungkin memeriksa apakah elemen adalah target acara. Tindakan default dapat melewatkan langkah ini.
  • Tindakan default memiliki keunggulan kinerja sedikit karena mereka tidak memerlukan tampilan dalam registry callback selama fase perambatan.

Menerapkan tindakan default

Tindakan default berlaku untuk semua kasus kelas. Kelas yang mengimplementasikan tindakan default juga dapat memiliki callback yang terdaftar pada instancenya.

Ketika kelas menerapkan aksi default, itu harus derive subclass baru VisualElement dan menerapkan metode ExecuteDefaultActionAtTarget(), metode ExecuteDefaultAction(), atau keduanya.

Tindakan default dieksekusi pada setiap kasus sub-kelas elemen visual ketika instance menerima acara. Untuk menyesuaikan tindakan default, Anda dapat override ExecuteDefaultActionAtTarget() dan ExecuteDefaultAction(), seperti yang ditunjukkan dalam contoh di bawah ini:

override void ExecuteDefaultActionAtTarget(EventBase evt)
{
    // Call the base function.
    base.ExecuteDefaultActionAtTarget(evt);

    if (evt.GetEventTypeId() == MouseDownEvent.TypeId())
    {
        // ...
    }
    else if (evt.GetEventTypeId() == MouseUpEvent.TypeId())
    {
        // ...
    }
    // More event types
}

Menerapkan tindakan default Anda pada ExecuteDefaultAction() memungkinkan Anda untuk menghentikan atau mencegah pelaksanaan tindakan default.

Jika Anda ingin tindakan default target untuk dieksekusi sebelum panggilan induknya, menerapkan tindakan default di ExecuteDefaultActionAtTarget().

Anda harus melihat tindakan default sebagai perilaku bahwa jenis elemen harus memiliki ketika menerima acara. Misalnya, kotak centang harus mengalihkan keadaannya dalam menanggapi acara klik. Untuk mengeksekusi ini, Anda dapat menimpa fungsi virtual aksi default, alih-alih mendaftarkan callback pada semua kotak centang.

Praktik terbaik untuk kontrol kustom

Menerapkan perilaku

Anda harus menerapkan perilaku dari elemen Anda dengan tindakan default. Anda dapat memanggil PreventDefault() dalam panggilan yang melekat pada kasus untuk membatalkan perilaku elemen default.

Manfaat tambahan perilaku implementasi sebagai tindakan default adalah:

  • Tindakan default tidak memerlukan lookup di registry callback.
  • Instance tanpa callback tidak memasuki proses perambatan.

Untuk fleksibilitas yang lebih besar, Anda dapat mengeksekusi tindakan default dari target acara pada dua saat selama proses pengiriman acara:

  1. Antara trik-down dan fase perambatan gelembung-up, segera setelah pelaksanaan callback target, override ExecuteDefaultActionsAtTarget().
  2. Pada akhir proses pengiriman acara, override ExecuteDefaultActions().

Tindakan default pada kelas

Menerapkan tindakan default kelas Anda dalam ExecuteDefaultActions(), jika mungkin. Ini memungkinkan lebih banyak pilihan untuk menimpa kelas. Anda dapat memanggil PreventDefault() untuk menimpa kelas selama fase trik-down atau fase gelembung-up dari proses perambatan acara.

Anda harus menghentikan perbanyakan acara selama tindakan default jika acara tidak boleh diperbanyakkan ke elemen induk. Misalnya, bidang teks menerima KeyDownEvent yang mengubah nilainya, seperti kunci Delete untuk menghapus konten. Acara ini tidak boleh menyebar ke elemen visual induk. Gunakan ExecuteDefaultActionsAtTarget() untuk menerapkan aksi default, dan sebut StopPropagation() untuk memastikan acara tidak diproses selama fase gelembung-up.

Tindakan default hanya mengeksekusi target acara. Untuk kelas untuk bereaksi terhadap peristiwa yang menargetkan elemen anak atau induk mereka, Anda harus mendaftarkan callback untuk menerima acara baik selama tahap trik atau fase perbanyakan gelembung. Hindari mendaftarkan panggilan di kelas Anda untuk meningkatkan kinerja.

Menghentikan perambatan acara dan membatalkan tindakan default

Ketika menangani acara di dalam callback atau tindakan default, Anda dapat menghentikan perbanyakan acara lebih lanjut dan pelaksanaan tindakan default. Misalnya, panel induk bisa menghentikan perbanyakan selama fase trik-down untuk mencegah anak-anaknya menerima acara.

Anda tidak dapat mencegah pelaksanaan metode EventBase.PreDispatch() dan EventBase.PostDispatch() di dalam kelas acara itu sendiri.

Metode berikut mempengaruhi perambatan acara dan tindakan default:

StopImmediatePropagation()

  • Menghentikan proses perambatan acara segera, sehingga tidak ada pemanggilan lain yang dilakukan untuk acara. Namun, tindakan default ExecuteDefaultActionAtTarget() dan ExecuteDefaultAction() masih dijalankan.

StopPropagation()

  • Menghentikan proses perambatan acara setelah panggilan terakhir pada elemen saat ini. Ini memastikan bahwa semua callback dilakukan pada elemen saat ini, tetapi tidak ada elemen lebih lanjut bereaksi terhadap acara. Tindakan default ExecuteDefaultActionAtTarget() dan ExecuteDefaultAction() masih dijalankan.

PreventDefaultAction()

  • Mencegah proses perambatan acara dari memanggil tindakan default ExecuteDefaultActionAtTarget() dan ExecuteDefaultAction(). PreventDefaultAction() tidak mencegah pelaksanaan callback lain, dan tidak efektif pada ExecuteDefaultActionAtTarget() ketika disebut selama fase gelembung-up.

  • 2018–11–02 Login