Vorgehensweise: Behandeln eines RoutingereignissesHow to: Handle a Routed Event

Dieses Beispiel zeigt, wie Bubbling-Ereignisse funktionieren, und wie Sie einen Handler schreiben, der die Routingereignisdaten verarbeiten kann.This example shows how bubbling events work and how to write a handler that can process the routed event data.

BeispielExample

In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) werden Elemente in einer Elementstruktur angeordnet.In Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF), elements are arranged in an element tree structure. Bei der Verarbeitung von Ereignissen, die ursprünglich von untergeordneten Elementen in der Elementstruktur ausgelöst werden, kann das übergeordnete Element teilnehmen.The parent element can participate in the handling of events that are initially raised by child elements in the element tree. Dies ist durch das Ereignisrouting möglich.This is possible because of event routing.

Routingereignisse verfolgen normalerweise eine der folgenden Routingstrategien: Bubbling oder Tunneln.Routed events typically follow one of two routing strategies, bubbling or tunneling. Dieses Beispiel konzentriert sich auf das bubbling-Ereignis und verwendet die ButtonBase.Click Ereignis, um das routing zu verdeutlichen.This example focuses on the bubbling event and uses the ButtonBase.Click event to show how routing works.

Das folgende Beispiel erstellt zwei Button steuert und verwendet XAMLXAML Attributsyntax, um ein Ereignishandler einem gemeinsamen übergeordneten Element anzufügen, die in diesem Beispiel wird StackPanel.The following example creates two Button controls and uses XAMLXAML attribute syntax to attach an event handler to a common parent element, which in this example is StackPanel. Anstatt einzelne Ereignishandler für die einzelnen Button untergeordnetes Element im Beispiel verwendet, um den Ereignishandler zum Anfügen der StackPanel übergeordnetes Element.Instead of attaching individual event handlers for each Button child element, the example uses attribute syntax to attach the event handler to the StackPanel parent element. Dieses Muster für die Ereignisbehandlung veranschaulicht, wie das Ereignisrouting als Verfahren zum Reduzieren der Anzahl der Elemente verwendet wird, bei denen ein Handler angefügt ist.This event-handling pattern shows how to use event routing as a technique for reducing the number of elements where a handler is attached. Alle bubbling-Ereignisse für die einzelnen Button Route über das übergeordnete Element.All the bubbling events for each Button route through the parent element.

Beachten Sie, dass auf dem übergeordneten Element StackPanel -Element, das Click Ereignisnamen angegeben, wie das Attribut teilweise durch benennen qualifiziert wird die Button Klasse.Note that on the parent StackPanel element, the Click event name specified as the attribute is partially qualified by naming the Button class. Die Button -Klasse ist eine ButtonBase abgeleitete Klasse, die die Click Ereignis in der Elementauflistung.The Button class is a ButtonBase derived class that has the Click event in its members listing. Diese partiellen Qualifikation-Technik für das Anhängen eines ereignishandlers ist erforderlich, wenn das Ereignis behandelt wird, das nicht, in die Elemente vorhanden ist des Elements, an der Routingereignishandler angefügt, auflisten.This partial qualification technique for attaching an event handler is necessary if the event that is being handled does not exist in the members listing of the element where the routed event handler is attached.

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

Das folgende Beispiel verarbeitet die Click Ereignis.The following example handles the Click event. Im Beispiel wird gemeldet, welches Element das Ereignis behandelt und welches Element das Ereignis auslöst.The example reports which element handles the event and which element raises the event. Der Ereignishandler wird ausgeführt, wenn der Benutzer auf eine Schaltfläche klickt.The event handler is executed when the user clicks either button.

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

Siehe auchSee also