UIElement.AddHandler(RoutedEvent, Object, Boolean) Metode

Definisi

Menambahkan penanganan aktivitas yang dirutekan untuk peristiwa rute tertentu, menambahkan handler ke pengumpulan handler pada elemen saat ini. Tentukan handledEventsToo sebagai true agar handler yang disediakan dipanggil meskipun kejadian ditangani di tempat lain.

public:
 virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)

Parameter

routedEvent
RoutedEvent

Pengidentifikasi untuk peristiwa yang dirutekan yang akan ditangani.

handler
Object

Platform::Object

IInspectable

Referensi ke implementasi handler.

handledEventsToo
Boolean

bool

true untuk mendaftarkan handler sehingga dipanggil bahkan ketika peristiwa yang dirutekan ditandai ditangani dalam data peristiwanya.

false untuk mendaftarkan handler dengan kondisi default bahwa itu tidak akan dipanggil jika peristiwa yang dirutekan sudah ditandai ditangani. Defaultnya adalah false.

Jangan secara rutin meminta untuk menangani kembali peristiwa yang dirutekan, karena mengganggu desain yang dimaksudkan dari sistem peristiwa Windows Runtime untuk komposit kontrol.

Contoh

Contoh ini menunjukkan sintaks dasar untuk menghubungkan penanganan aktivitas dengan AddHandler dan handledEventsToo sebagai true. Dalam hal ini peristiwa yang sedang dikabeli diketuk. Tempat umum untuk penanganan kabel dimuat untuk halaman atau OnApplyTemplate untuk kontrol bertemplat .

void MyControl::MyPointerPressedHandler(
    winrt::Windows::Foundation::IInspectable const &sender,
    winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
  // implementation..
}

this->AddHandler(
    winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
    winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(this, &MyControl::MyPointerPressedHandler)),
    true);

// Or passing the handler as a lambda, instead of a member function:
this->AddHandler(
    winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
    winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(
      [=](auto &&, winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const &args) {
      // ...
    })),
    true);    
void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
     //implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
     this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
    //implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
    this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}
Private Sub Page_Tapped(sender As Object, e As TappedRoutedEventArgs)
    ' implementation
End Sub
Private Sub Page_Loaded_1(sender As Object, e As RoutedEventArgs)
    Me.AddHandler(UIElement.TappedEvent, New TappedEventHandler(AddressOf Page_Tapped), True)
End Sub

Keterangan

Jangan mencoba menggunakan AddHandler sebagai pengganti umum untuk sintaksis khusus bahasa yang biasanya Anda gunakan untuk penanganan aktivitas kabel; tidak akan berfungsi, karena tidak semua peristiwa memiliki pengidentifikasi yang dapat Anda lewati sebagai routedEvent. AddHandler khusus untuk peristiwa yang dirutekan, dan terutama ditujukan untuk skenario tertentu yang diaktifkan dengan melewati handledEventsToo sebagai benar. Untuk informasi selengkapnya, lihat Ringkasan peristiwa dan peristiwa yang dirutekan.

Pengidentifikasi peristiwa yang dirutekan

Pengidentifikasi peristiwa yang dirutekan umumnya adalah anggota properti statis UIElement. Misalnya, untuk menambahkan handler untuk peristiwa KeyUp , teruskan KeyUpEvent untuk parameter ini. Hanya sejumlah kecil peristiwa Windows Runtime yang memiliki pengidentifikasi ini; hanya peristiwa yang dirutekan di UIElement yang memiliki API pengidentifikasi yang tersedia untuk penggunaan ini. Ini umumnya adalah peristiwa yang terkait dengan tindakan input di berbagai tingkat: tingkat pointer, tingkat gerakan, tingkat manipulasi. Selain itu, peristiwa input utama dapat ditangani dengan cara ini.

Berikut adalah daftar peristiwa rute yang mengekspos pengidentifikasi peristiwa yang dirutekan, dan dengan demikian dapat diproses oleh penangan yang didaftarkan oleh panggilan AddHandler:

Parameter handler

Parameter handler adalah parameter tanpa jenis, tetapi Anda harus memberikan delegasi baru yang mereferensikan metode handler yang khusus untuk peristiwa yang diinginkan. Misalnya, jika menangani peristiwa KeyUp , berikan instans KeyEventHandler baru yang mereferensikan metode yang didasarkan pada tanda tangan delegasi KeyEventHandler tersebut. Ini memerlukan dereferensi, dan sintaks dereferensi bervariasi tergantung pada bahasa mana yang Anda gunakan. Lihat contoh dalam topik ini.

Kapan menggunakan handledEventsToo

Memproses peristiwa input tingkat rendah dengan cara praktis adalah tugas yang kompleks. Banyak kontrol menerapkan perilaku di mana peristiwa tertentu ditandai sebagai ditangani, dan digantikan oleh peristiwa lain yang lebih intuitif. Umumnya, kontrol akan menandai peristiwa yang dirutekan sebagai ditangani hanya jika ada beberapa niat desain untuk melakukannya. Namun, dalam skenario tertentu, niat desain tersebut mungkin bukan apa yang diperlukan penanganan khusus Anda terhadap peristiwa input. Untuk skenario inilah penangan pendaftaran dengan handledEventsToo sebagai benar sudah sesuai. Tetapi Anda tidak boleh melakukan ini secara rutin. Memanggil handler sebagai respons terhadap semua peristiwa bahkan jika ditangani akan mempersulit logika pemrosesan peristiwa aplikasi Anda sendiri. Anda mungkin melihat penurunan performa jika logika handler substansial. Anda harus melampirkan handler ke peristiwa yang sudah ditangani hanya jika Anda telah menemukan bahwa kontrol tertentu menangani peristiwa yang ingin Anda tangani dengan logika aplikasi.

Teknik lain untuk menghindari perilaku penanganan kelas kontrol adalah dengan subkelas yang mengontrol dan mengambil alih metode OnEvent-nya , yang merupakan penimpaan yang telah dikonfigurasi sebelumnya di mana kontrol menandai peristiwa sebagai ditangani. Namun, ini juga bisa rumit. Anda mungkin harus mereprodusi implementasi penanganan kontrol tanpa memanggil implementasi dasar, karena implementasi dasar akan menandai peristiwa sebagai ditangani. Untuk informasi selengkapnya, lihat Ringkasan peristiwa dan peristiwa yang dirutekan.

Berlaku untuk

Lihat juga