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
.NET Desktop feedback