Freigeben über


Vorschauereignisse

Vorschauereignisse, auch bekannt als Tunnelingereignisse, sind Routingereignisse, bei denen die Richtung der Route vom Anwendungsstamm zu dem Element verläuft, das das Ereignis ausgelöst hat, und in den Ereignisdaten als Quelle angegeben wird. Nicht alle Ereignisszenarien unterstützen oder erfordern Vorschauereignisse; dieses Thema beschreibt die Situationen, in denen Vorschauereignisse existieren, wie Anwendungen oder Komponenten sie behandeln sollten und Fälle, in denen das Erstellen von Vorschauereignissen in benutzerdefinierten Komponenten oder Klassen sinnvoll sein könnte.

Vorschauereignisse und Eingaben

Wenn Sie Vorschaureignisse im Allgemeinen behandeln, sollten Sie darauf achten, die behandelten Ereignisse in den Ereignisdaten zu markieren. Die Behandlung eines Vorschauereignisses bei einem anderen Element als dem, das es ausgelöst hat (das Element, das in den Ereignisdaten als Quelle angegeben ist), hat zur Folge, dass ein Element nicht die Möglichkeit hat, das von ihm verursachte Ereignis zu behandeln. Manchmal ist dies das gewünschte Ergebnis, insbesondere wenn die fraglichen Elemente in Beziehungen innerhalb der Zusammensetzung eines Steuerelements stehen.

Speziell bei Eingabeereignissen teilen sich die Vorschauereignisse auch Ereignisdateninstanzen mit dem entsprechenden Bubbling-Ereignis. Wenn Sie einen Handler für die Vorschauereignisklasse verwenden, um das Eingabeereignis als behandelt zu markieren, wird der Handler für die Bubbling-Eingabeereignisklasse nicht aufgerufen. Oder, wenn Sie einen Handler für eine Vorschauereignisinstanz verwenden, um das behandelte Ereignis zu markieren, werden Handler für das Bubbling-Ereignis normalerweise nicht aufgerufen. Klassenhandler oder Instanzenhandler können mit der Option registriert oder angehängt werden, dass sie auch dann aufgerufen werden, wenn das Ereignis als behandelt markiert ist, aber diese Technik wird im Allgemeinen nicht verwendet.

Weitere Informationen zur Klassenbehandlung und ihrem Zusammenhang mit Vorschauereignissen finden Sie unter Markieren von Routingereignissen als behandelt und Klassenbehandlung.

Umgehen der Ereignisunterdrückung von Steuerelementen

Ein Szenario, in dem Vorschauereignisse häufig verwendet werden, ist die Behandlung von Eingabeereignissen durch zusammengesetzte Steuerungselemente. Manchmal unterdrückt der Autor des Steuerelements ein bestimmtes Ereignis, das von seinem Steuerelement ausgeht, vielleicht um es durch ein komponentendefiniertes Ereignis zu ersetzen, das mehr Informationen enthält oder ein spezifischeres Verhalten beinhaltet. Zum Beispiel unterdrückt eine Windows Presentation Foundation (WPF)-Button die MouseLeftButtonDown- und MouseRightButtonDown-Bubbling-Ereignisse, die durch die Button oder ihre zusammengesetzten Elemente ausgelöst werden, zugunsten des Erfassens der Maus und des Auslösens eines Click-Ereignisses, das immer durch die Button selbst ausgelöst wird. Das Ereignis und seine Daten bewegen sich weiterhin auf der Route, aber da die Button die Ereignisdaten als Handled markiert, werden nur Handler für das Ereignis aufgerufen, die speziell angegeben haben, dass sie im Fall, dass handledEventsToo aufgerufen werden, handeln sollen. Wenn andere Elemente in Richtung des Stammes Ihrer Anwendung immer noch die Möglichkeit haben wollen, ein Ereignis zu behandeln, bei dem die Steuerung unterdrückt wird, besteht eine Alternative darin, Handler im Code anzuhängen, in dem handledEventsToo als true angegeben wird. Eine einfachere Technik besteht jedoch oft darin, die Routingrichtung, die Sie behandeln, so zu ändern, dass sie das Vorschauäquivalent eines Eingabeereignisses ist. Wenn ein Steuerelement beispielsweise MouseLeftButtonDown unterdrückt, versuchen Sie stattdessen, einen Handler für PreviewMouseLeftButtonDown anzufügen. Diese Technik funktioniert nur für einfache Elementeingabeereignisse wie MouseLeftButtonDown. Diese Eingabeereignisse verwenden Tunnel-/Bubble-Paare, lösen beide Ereignisse aus und teilen die Ereignisdaten.

Jede dieser Techniken hat ihre Nebenwirkungen oder Einschränkungen. Der Nebeneffekt der Behandlung des Vorschauereignisses ist, dass die Behandlung des Ereignisses zu diesem Zeitpunkt Handler deaktivieren könnte, die darauf warten, das Bubbling-Ereignis zu behandeln, und daher ist es in der Regel keine gute Idee, das Ereignis als behandelt zu markieren, während es sich noch im Vorschaubereich der Route befindet. Die Einschränkung der handledEventsToo-Technik besteht darin, dass Sie einen handledEventsToo-Handler in XAML nicht als Attribut angeben können. Sie müssen den Ereignishandler im Code registrieren, nachdem Sie einen Objektverweis auf das Element erhalten haben, an das der Handler angefügt werden soll.

Siehe auch