Freigeben über


Vorgehensweise: Hinzufügen eines Ereignishandlers mithilfe von Code

In diesem Beispiel wird gezeigt, wie Sie einem Element mithilfe von Code einen Ereignishandler hinzufügen.

Wenn Sie einem XAML-Element einen Ereignishandler hinzufügen möchten und die Markupseite, die das Element enthält, bereits geladen wurde, müssen Sie den Handler mithilfe von Code hinzufügen. Wenn Sie den Elementbaum für eine Anwendung ausschließlich mit Code erstellen und keine Elemente mit XAML deklarieren, können Sie bestimmte Methoden aufrufen, um dem konstruierten Elementbaum Ereignishandler hinzuzufügen.

Beispiel

Im folgenden Beispiel wird eine neue Button auf eine bestehende Seite hinzugefügt, die ursprünglich in XAML definiert wurde. Eine CodeBehind-Datei implementiert eine Ereignishandlermethode und fügt diese Methode dann als neuen Ereignishandler für die Buttonhinzu.

Im C#-Beispiel wird der +=-Operator verwendet, um einem Ereignis einen Handler zuzuweisen. Dies ist derselbe Operator, der zum Zuweisen eines Handlers im Common Language Runtime (CLR)-Ereignisbehandlungsmodell verwendet wird. Microsoft Visual Basic unterstützt diesen Operator nicht als Mittel zum Hinzufügen von Ereignishandlern. Stattdessen ist eine von zwei Techniken erforderlich:

  • Verwenden Sie die AddHandler-Methode zusammen mit einem AddressOf-Operator, um auf die Ereignishandlerimplementierung zu verweisen.

  • Verwenden Sie das schlüsselwort Handles als Teil der Ereignishandlerdefinition. Diese Technik wird hier nicht gezeigt; siehe Visual Basic- und WPF-Ereignisbehandlung.

<TextBlock Name="text1">Start by clicking the button below</TextBlock>
<Button Name="b1" Click="MakeButton">Make new button and add handler to it</Button>
public partial class RoutedEventAddRemoveHandler {
    void MakeButton(object sender, RoutedEventArgs e)
    {
        Button b2 = new Button();
        b2.Content = "New Button";
        // Associate event handler to the button. You can remove the event
        // handler using "-=" syntax rather than "+=".
        b2.Click  += new RoutedEventHandler(Onb2Click);
        root.Children.Insert(root.Children.Count, b2);
        DockPanel.SetDock(b2, Dock.Top);
        text1.Text = "Now click the second button...";
        b1.IsEnabled = false;
    }
    void Onb2Click(object sender, RoutedEventArgs e)
    {
        text1.Text = "New Button (b2) Was Clicked!!";
    }
Public Partial Class RoutedEventAddRemoveHandler
    Private Sub MakeButton(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Dim b2 As Button = New Button()
        b2.Content = "New Button"
        AddHandler b2.Click, AddressOf Onb2Click
        root.Children.Insert(root.Children.Count, b2)
        DockPanel.SetDock(b2, Dock.Top)
        text1.Text = "Now click the second button..."
        b1.IsEnabled = False
    End Sub
    Private Sub Onb2Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        text1.Text = "New Button (b2) Was Clicked!!"
    End Sub

Anmerkung

Das Hinzufügen eines Ereignishandlers auf der anfänglich analysierten XAML-Seite ist wesentlich einfacher. Fügen Sie innerhalb des Objektelements, in dem Sie den Ereignishandler hinzufügen möchten, ein Attribut hinzu, das dem Namen des Ereignisses entspricht, das Sie behandeln möchten. Geben Sie dann den Wert dieses Attributs als Namen der Ereignishandlermethode an, die Sie in der CodeBehind-Datei der XAML-Seite definiert haben. Weitere Informationen finden Sie unter XAML in WPF oder Routed Events Overview.

Siehe auch