Bagikan melalui


Cara: Menangani Peristiwa Yang Dirutekan

Contoh ini menunjukkan cara kerja peristiwa gelembung dan cara menulis handler yang dapat memproses data peristiwa yang dirutekan.

Contoh

Di Windows Presentation Foundation (WPF), elemen disusun dalam struktur pohon elemen. Elemen induk dapat berpartisipasi dalam penanganan peristiwa yang awalnya dibesarkan oleh elemen anak di pohon elemen. Ini dimungkinkan karena perutean peristiwa.

Peristiwa yang dirutekan biasanya mengikuti salah satu dari dua strategi perutean, gelembung atau penerowongan. Contoh ini berfokus ButtonBase.Click pada peristiwa gelembung dan menggunakan peristiwa untuk menunjukkan cara kerja perutean.

Contoh berikut membuat dua Button kontrol dan menggunakan sintaks atribut XAML untuk melampirkan penanganan aktivitas ke elemen induk umum, yang dalam contoh ini adalah StackPanel. Alih-alih melampirkan penanganan aktivitas individual untuk setiap Button elemen turunan, contohnya menggunakan sintaks atribut untuk melampirkan penanganan aktivitas ke StackPanel elemen induk. Pola penanganan peristiwa ini menunjukkan cara menggunakan perutean peristiwa sebagai teknik untuk mengurangi jumlah elemen tempat handler dilampirkan. Semua peristiwa gelembung untuk setiap Button rute melalui elemen induk.

Perhatikan bahwa pada elemen induk StackPanel , Click nama peristiwa yang ditentukan sebagai atribut sebagian memenuhi syarat dengan menamai Button kelas. Kelas Button adalah ButtonBase kelas turunan yang memiliki Click acara dalam daftar anggotanya. Teknik kualifikasi parsial untuk melampirkan penanganan aktivitas ini diperlukan jika peristiwa yang sedang ditangani tidak ada dalam daftar anggota elemen tempat penanganan aktivitas yang dirutekan dilampirkan.

<StackPanel
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.RoutedEventHandle"
  Name="dpanel"
  Button.Click="HandleClick"
>
  <StackPanel.Resources>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Height" Value="20"/>
        <Setter Property="Width" Value="250"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
      </Style>
  </StackPanel.Resources>
  <Button Name="Button1">Item 1</Button>
  <Button Name="Button2">Item 2</Button>
  <TextBlock Name="results"/>
</StackPanel>

Contoh berikut menangani Click peristiwa. Contoh melaporkan elemen mana yang menangani peristiwa dan elemen mana yang menaikkan peristiwa. Penanganan aktivitas dijalankan ketika pengguna mengklik salah satu tombol.

public partial class RoutedEventHandle : StackPanel
{
    StringBuilder eventstr = new StringBuilder();
    void HandleClick(object sender, RoutedEventArgs args)
    {
        // Get the element that handled the event.
        FrameworkElement fe = (FrameworkElement)sender;
        eventstr.Append("Event handled by element named ");
        eventstr.Append(fe.Name);
        eventstr.Append("\n");

        // Get the element that raised the event.
        FrameworkElement fe2 = (FrameworkElement)args.Source;
        eventstr.Append("Event originated from source element of type ");
        eventstr.Append(args.Source.GetType().ToString());
        eventstr.Append(" with Name ");
        eventstr.Append(fe2.Name);
        eventstr.Append("\n");

        // Get the routing strategy.
        eventstr.Append("Event used routing strategy ");
        eventstr.Append(args.RoutedEvent.RoutingStrategy);
        eventstr.Append("\n");

        results.Text = eventstr.ToString();
    }
}
Private eventstr As New Text.StringBuilder()

Private Sub HandleClick(ByVal sender As Object, ByVal args As RoutedEventArgs)
    ' Get the element that handled the event.
    Dim fe As FrameworkElement = DirectCast(sender, FrameworkElement)
    eventstr.Append("Event handled by element named ")
    eventstr.Append(fe.Name)
    eventstr.Append(vbLf)

    ' Get the element that raised the event. 
    Dim fe2 As FrameworkElement = DirectCast(args.Source, FrameworkElement)
    eventstr.Append("Event originated from source element of type ")
    eventstr.Append(args.Source.[GetType]().ToString())
    eventstr.Append(" with Name ")
    eventstr.Append(fe2.Name)
    eventstr.Append(vbLf)

    ' Get the routing strategy.
    eventstr.Append("Event used routing strategy ")
    eventstr.Append(args.RoutedEvent.RoutingStrategy)
    eventstr.Append(vbLf)

    results.Text = eventstr.ToString()
End Sub

Baca juga