VorschauereignissePreview Events

Vorschauereignisse, auch bekannt als Tunneling-Ereignisse, sind die Routingereignisse übertragen, in denen die Richtung der Route aus den Anwendungsstamm für das Element, das das Ereignis ausgelöst hat, und wird als Quelle in den Ereignisdaten gemeldet.Preview events, also known as tunneling events, are routed events where the direction of the route travels from the application root towards the element that raised the event and is reported as the source in event data. Nicht alle Ereignisszenarien zu unterstützen oder erfordern Vorschauereignisse; Dieses Thema beschreibt die Situationen, in denen Vorschauereignisse vorhanden wie Anwendungen oder Komponenten, die sie behandeln soll, und die Fälle, in denen Erstellen von Vorschau-Ereignissen in benutzerdefinierten Komponenten oder Klassen geeignet sein könnte.Not all event scenarios support or require preview events; this topic describes the situations where preview events exist, how applications or components should handle them, and cases where creating preview events in custom components or classes might be appropriate.

Vorschauereignisse und EingabePreview Events and Input

Wenn Sie Preview behandeln Ereignisse im Allgemeinen vorsichtig sein, behandelt markieren die Ereignisse im Daten.When you handle Preview events in general, be cautious about marking the events handled in the event data. Behandeln ein Vorschauereignis auf ein beliebiges Element als das Element, das ausgelöst hat (das Element, das als Quelle in den Ereignisdaten gemeldet wird) verfügt über die Auswirkungen der erhält kein Element der Möglichkeit zum Behandeln des Ereignisses, das es ausgelöst hat.Handling a Preview event on any element other than the element that raised it (the element that is reported as the source in the event data) has the effect of not providing an element the opportunity to handle the event that it originated. Manchmal ist dies das gewünschte Ergebnis, insbesondere, wenn die betreffenden Elemente in Beziehungen innerhalb der Zusammensetzung eines Steuerelements vorhanden sind.Sometimes this is the desired result, particularly if the elements in question exist in relationships within the compositing of a control.

Für Eingabeereignisse teilen sich insbesondere Vorschauereignisse auch Ereignisinstanzen-Daten mit den entsprechenden bubbling-Ereignis.For input events specifically, Preview events also share event data instances with the equivalent bubbling event. Wenn Sie einen Vorschauhandler für Event-Klasse verwenden, um das Eingabeereignis verarbeitet zu markieren, wird das Eingabeereignis bubbling-Klassenhandler nicht aufgerufen werden.If you use a Preview event class handler to mark the input event handled, the bubbling input event class handler will not be invoked. Oder, wenn Sie einen Vorschau-Instanz-Ereignishandler verwenden, um das Ereignis als behandelt zu markieren, Handler für das bubbling-Ereignis werden nicht in der Regel aufgerufen werden.Or, if you use a Preview event instance handler to mark the event handled, handlers for the bubbling event will not typically be invoked. Klassen- oder Instanzhandler können registriert oder angefügt, mit der Option, die aufgerufen werden, selbst wenn das Ereignis als behandelt markiert, aber diese Methode normalerweise nicht verwendet wird.Class handlers or instance handlers can be registered or attached with an option to be invoked even if the event is marked handled, but that technique is not commonly used.

Weitere Informationen zu Klassenbehandlung und wie deren Beziehung zu Vorschauereignisse finden Sie unter Markieren von Routingereignissen als behandelt und Klassenbehandlung.For more information about class handling and how it relates to Preview events see Marking Routed Events as Handled, and Class Handling.

Umgehen der Ereignisunterdrückung von SteuerelementenWorking Around Event Suppression by Controls

Ein Szenario, in denen Vorschauereignisse häufig verwendet werden, ist für zusammengesetzte Steuerelement Behandlung von Eingabeereignissen.One scenario where Preview events are commonly used is for composited control handling of input events. In einigen Fällen unterdrückt der Autor des Steuerelements ein bestimmtes Ereignis aus, die aus ihrer Kontrolle, z. B. um ein Ereignis zu ersetzen, die Informationen enthält, oder ein spezifischeres Verhalten impliziert stammen.Sometimes, the author of the control suppresses a certain event from originating from their control, perhaps in order to substitute a component-defined event that carries more information or implies a more specific behavior. Z. B. eine Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Button unterdrückt MouseLeftButtonDown und MouseRightButtonDown bubbling-Ereignisse ausgelöst werden, indem die Button oder die zusammengesetzten Elemente und die Maus erfasst und Auslösen von eine Click -Ereignis, das immer ausgelöst wird, indem Sie die Button selbst.For instance, a Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Button suppresses MouseLeftButtonDown and MouseRightButtonDown bubbling events raised by the Button or its composite elements in favor of capturing the mouse and raising a Click event that is always raised by the Button itself. Das Ereignis und seine Daten weiterhin entlang der Route, aber da die Button markiert die Daten als Handled, nur einen Handler für das Ereignis aus, die ausdrücklich angegeben, sie fungieren soll, der handledEventsToo Fall aufgerufen werden.The event and its data still continue along the route, but because the Button marks the event data as Handled, only handlers for the event that specifically indicated they should act in the handledEventsToo case are invoked. Wenn andere Elemente für das Stammverzeichnis Ihrer Anwendung immer noch eine Möglichkeit, ein Steuerelement unterdrückt-Ereignis zu behandeln, ist eine Alternative zum Anfügen von Handlern in Code mit handledEventsToo als angegebenen true.If other elements towards the root of your application still wanted an opportunity to handle a control-suppressed event, one alternative is to attach handlers in code with handledEventsToo specified as true. Aber häufig ein einfacheres Verfahren zum Ändern der routing Richtung, die Sie behandeln, um die Vorschau-Darstellung ein Eingabeereignis zu werden.But often a simpler technique is to change the routing direction you handle to be the Preview equivalent of an input event. Z. B. wenn ein Steuerelement unterdrückt MouseLeftButtonDown, versuchen Sie es Anfügen eines Handlers für PreviewMouseLeftButtonDown stattdessen.For instance, if a control suppresses MouseLeftButtonDown, try attaching a handler for PreviewMouseLeftButtonDown instead. Dieses Verfahren funktioniert nur für Eingabeereignisse Basiselement wie z. B. MouseLeftButtonDown.This technique only works for base element input events such as MouseLeftButtonDown. Diese Eingabeereignisse Tunneling/Bubbling-Eingabeereignispaare verwenden, lösen beide Ereignisse und Freigeben von Daten für das Ereignis.These input events use tunnel/bubble pairs, raise both events, and share the event data.

Jede dieser Techniken wurde entweder Nebenwirkungen oder Einschränkungen.Each of these techniques has either side effects or limitations. Den Nebeneffekt, dass der Behandlung des Ereignisses für die Vorschau ist, dass die Behandlung des Ereignisses an diesem Punkt kann deaktiviert werden, Handler, die Sie voraussichtlich die bubbling-Ereignis zu behandeln, und daher die Einschränkung besteht darin, dass es in der Regel keine gute Idee, markieren das Ereignis als behandelt zwar immer noch auf die Previ Neues Teil der Route.The side effect of handling the Preview event is that handling the event at that point might disable handlers that expect to handle the bubbling event, and therefore the limitation is that it is usually not a good idea to mark the event handled while it is still on the Preview part of the route. Die Beschränkung auf die handledEventsToo Technik ist, dass Sie nicht angeben einer handledEventsToo Ereignishandler in XAMLXAML als Attribut, müssen Sie den Ereignishandler im Code registrieren, nach dem erhalten eines Objektverweis auf das Element ist, in dem der Handler angefügt werden.The limitation of the handledEventsToo technique is that you cannot specify a handledEventsToo handler in XAMLXAML as an attribute, you must register the event handler in code after obtaining an object reference to the element where the handler is to be attached.

Siehe auchSee also