27 Ereignisse in der WPF
Die WPF stellt neben den herkömmlichen CLR-Eigenschaften auch Abhängigkeitseigenschaften bereit. In ähnlicher Weise wird von der WPF auch das Konzept der üblichen Ereignisse um die sogenannten Routed Events ergänzt. Die übliche Verschachtelung mehrerer WPF-Komponenten im XAML-Code hat dieses Konzept erforderlich gemacht. Einfache Ereignisse, wie beispielsweise in WinForm-Anwendungen oder auch unter ASP.NET realisiert, genügen dem Prinzip der Elementbäume der WPF nicht mehr.
In diesem Kapitel lernen Sie, was unter der Strategie der Routed Events verstanden wird, wie man sie umsetzt und sinnvoll einsetzt. Am Ende dieses Kapitels werden wir uns noch wichtigen Ereignisgruppen widmen.
27.1 Ereignishandler bereitstellen
So wie alle Anwendungen mit grafischer Benutzeroberfläche reagiert auch eine WPF-Anwendung immer dann, wenn ein Ereignis ausgelöst wird – beispielsweise durch die Aktion des Anwenders. Ist für das ausgelöste Ereignis ein Ereignishandler registriert, wird dieser ausgeführt.
Sehen wir uns als Erstes an, wie man grundsätzlich mit Ereignissen in der WPF umgeht. Nehmen wir dazu an, im XAML-Code sei innerhalb eines Grid-Elements ein Button positioniert, der auf das Click-Ereignis reagieren soll. Dazu muss bekanntlich ein Ereignishandler registriert werden. Am einfachsten ist es, die IntelliSense-Hilfe im XAML-Code zu nutzen und daraus Click auszuwählen. Durch zweimaliges Drücken der -Taste wird im XAML-Code das Ereignis an einen Ereignishandler gebunden, der automatisch in der Code-Behind-Datei bereitgestellt wird.
<Grid>
<Button Click="button1_Click" Height="30" Name="button1"
Margin="70,95,133,0">Button1</Button>
</Grid>
Listing 27.1 Registrieren eines Ereignishandlers im XAML-Code
Sie können einen Ereignishandler auch im Eigenschaftsfenster bereitstellen. Dazu schalten Sie im Eigenschaftsfenster die Ansicht Eigenschaften auf die Ansicht Ereignisse um, indem Sie auf das Blitzsymbol klicken. Ein Doppelklick auf das gewünschte Ereignis genügt, um den Ereignishandler mit der üblichen Namenskonvention zu erzeugen.
Verfügt eine Komponente über ein Standardereignis, lässt sich ein Ereignishandler auch mit einem Doppelklick auf die Komponente im Designer bereitstellen. Das ist beispielsweise der Fall, wenn Sie auf den Button doppelt klicken. Es wird danach der Ereignishandler für das Standardereignis Click erzeugt. Dieser könnte in der Code-Behind-Datei wie folgt aussehen:
void button1_Click(object sender, RoutedEventArgs e) { }
So wie alle anderen Ereignishandler in .NET weisen auch die Ereignishandler in der WPF zwei Parameter auf: Der erste ist vom Typ Object und liefert die Referenz auf die ereignisauslösende Komponente, der zweite stellt ereignisspezifische Daten zur Verfügung.
Die Verknüpfung zwischen einem Ereignis und einem Ereignishandler können Sie auch im Code festlegen, z. B.:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
button1.Click += new RoutedEventHandler(button1_Click);
}
void button1_Click(object sender, RoutedEventArgs e) {
MessageBox.Show("Im Click-Ereignishandler");
}
}
Listing 27.2 Registrierung eines Ereignishandlers mit Programmcode
Beachten Sie, dass dem Steuerelement in diesem Fall ausdrücklich ein Objektbezeichner (Eigenschaft Name) zugewiesen sein muss.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.