Nasıl yapılır: Gönderilmiş bir Olayı İşleme

Bu örnek, bualama olaylarını nasıl işlemektedir ve yönlendirilen olay verilerini işleyilebilecek bir işleyici yazmayı gösterir.

Örnek

Bu Windows Presentation Foundation (WPF), öğeler bir öğe ağacı yapısında düzenlenmiştir. Üst öğe, ilk olarak öğe ağacında alt öğeler tarafından yükselten olayların işlenmesine katılabilir. Bu, olay yönlendirmesi nedeniyle mümkündür.

Yönlendiren olaylar genellikle iki yönlendirme stratejilerinden birini (bu yalıtma veya tünel) takip eder. Bu örnek, bu yalıtma olayına odaklanır ve ButtonBase.Click yönlendirmenin nasıl çalıştığını göstermek için olayı kullanır.

Aşağıdaki örnek iki denetim oluşturur ve bu örnekte olan ortak bir üst öğeye bir olay işleyicisi eklemek için Button XAML özniteliği sözdizimini StackPanel kullanır. Örnek, her alt öğe için tek tek olay işleyicileri eklemek yerine, olay işleyicisini üst öğeye Button eklemek için öznitelik söz StackPanel dizimi kullanır. Bu olay işleme düzeni, bir işleyicinin ekli olduğu öğe sayısını azaltmaya yönelik bir teknik olarak olay yönlendirmeyi nasıl kullanabileceğini gösterir. Üst öğe aracılığıyla her yol Button için tüm bursile olayları.

Üst StackPanel öğede, özniteliği Click olarak belirtilen olay adının sınıfı adlandırarak kısmen nitelikli olduğunu Button unutmayın. sınıfı, Button üye ButtonBase listesinde olayı olan türetilmiş bir Click sınıftır. İşlen olay yönlendirilen olay işleyicinin ekli olduğu öğenin üye listesinde mevcut yoksa, olay işleyicisi eklemeye yönelik bu kısmi nitelik tekniği gereklidir.

<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>

Aşağıdaki örnek olayı Click ele almaktadır. Örnek, olayı hangi öğenin işleyeni ve hangi öğenin olayı yükselt olduğunu raporlar. Kullanıcı iki düğmeye tıkladığında olay işleyicisi yürütülür.

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

Ayrıca bkz.