Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 2 Routed Events s.a. Ein Routed Event kann mehrere EreignisHandler in einer Elementstruktur aufrufen und nicht nur den des Objekts, von dem das Ereignis ausgelöst wurde. Routed Events werden durch die Elementstruktur des WPF- Window durchgeleitet und an einer beliebigen Stelle verarbeitet, d.h. es werden alle Handler aufgerufen, die sich bei dem Ereignis registriert haben und zwischen dem Element bei dem das Ereignis aufgetreten ist und der root liegen. Befindet sich bei einem Element kein EreignisHandler wird die Route nicht unterbrochen. Die Route kann abgebrochen werden, indem bei letzten auszuführenden EreignisHandler e.Handled = true; gesetzt wird.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 3 Routing Strategie (1) Je nach Ereignisdefinition wird eine der folgenden Routing-Strategien verfolgt: Bubbling Die Route verläuft vom Quellelement (event source) per Bubbling durch die Elementstruktur nach oben bis zur Root, i.d.R. ein Window. Beispiel:ButtonBase.Click Event us/library/system.windows.controls.primitives.buttonbase.click.aspx us/library/system.windows.controls.primitives.buttonbase.click.aspx
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 4 Routing Strategie (2) Tunneling Zunächst werden die EreignisHandler an der root aufgerufen und anschließend wird das routed event über die untergeordneten Elemente bis zu dem Element weitergeleitet, bei dem das Ereignis ausgelöst wurde. Direct Das Ereignis wird nur auf dem Element behandelt, bei dem es ausgelöst wurde (Standard CLR Event-Verhalten).
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 5 Attached Events WPF unterstützt tunneling und bubbling von routed events auch durch Elemente, die dieses Ereignis überhaupt nicht definieren. Zum Beispiel ( Yes No Cancel
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 6 EreignisHandler in C#: private void CommonClickHandler(object sender, RoutedEventArgs e) { FrameworkElement feSource = e.Source as FrameworkElement; switch (feSource.Name) { case "YesButton": // do something here... break; case "NoButton": // do something... break; case "CancelButton": // do something... break; } e.Handled=true; }
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 7 Solution 6_RoutedEvents A_Bubbling B_Tunneling C_AttachedEvent