Feedback

C# - RoutedEvent erstellen

Veröffentlicht von am 11/25/2009
(2 Bewertungen)
In Wpf gibt es verschiedene Arten von Events. Die normalen aus .NET bereits bekannten. Und dann gibt es noch die RoutedEvents. Hier wird zwischen einem Bubbling und einem Tunneling Event unterschieden.

Beim Bubbling wird aus der Control-Hirarchie von oben nach unten benachrichtigt. Beim Tunneling genau anders herum. z.B. liegt auf einem Grid ein StackPanel, in dem ein Button eingefügt ist. Beim Bubbling wird zuerst der Button Event ausgelöst, dann der vom Panel. Zum Schluss der vom Grid. Beim Tunneling zuerst das Grid, dann das Panel, zum Schluss der Button. Zum Anhalten dieses Prozesses gibt es von den RoutedEventArgs, die als Parameter übergeben werden das Flag Handled. Wird es auf
true
gesetzt, unterbricht die Abarbeitung im Fluss von oben nach unten beim Tunneling, oder von unten nach oben beim Bubbeling.

Es wird nur eine Instanz von RoutedEventArgs für beide Phasen benutzt. Sowohl fürs Tunneling, als auch fürs Bubbeling. Das dient zum stoppen der Abarbeitung und damit z.B. zum Abfangen von Nachrichten.

Zum erstellen eines RoutedEvents wird der EventManager verwendet.
public static readonly RoutedEvent MySpecialClickEvent = EventManager.RegisterRoutedEvent("MySpecialClick",
                                                                                              RoutingStrategy.Bubble,
                                                                                              typeof (RoutedEventArgs),
                                                                                              typeof (MainWindow));
        public event RoutedEventHandler MySpecialClick
        {
            add
            {
                this.AddHandler(MySpecialClickEvent, value);
            }
            remove
            {
                this.RemoveHandler(MySpecialClickEvent, value);
            }
        }
Abgelegt unter Wpf, RoutedEvent, Event, Bubbling, Tunneling.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!