Eventi di anteprimaPreview Events

Eventi di anteprima, noti anche come eventi di tunneling, sono eventi indirizzati in cui la direzione della route viene trasferito dalla radice dell'applicazione verso l'elemento che ha generato l'evento e viene indicato come origine di dati dell'evento.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. Non tutti gli scenari di evento supportano o richiedono eventi di anteprima. questo argomento descrive le situazioni in cui gli eventi di anteprima sono presenti, come le applicazioni o componenti devono essere gestiti, e i casi in cui la creazione di eventi di anteprima in componenti personalizzati o classi potrebbe essere appropriata.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.

Input e gli eventi di anteprimaPreview Events and Input

Quando si gestisce gli eventi in generale, è necessario prestare attenzione all'anteprima contrassegnare gli eventi gestiti nell'evento dati.When you handle Preview events in general, be cautious about marking the events handled in the event data. Gestisce un evento di anteprima in qualsiasi elemento diverso dall'elemento che lo ha generato (l'elemento che viene segnalato come origine nei dati dell'evento) ha l'effetto di non fornisce la possibilità di gestire l'evento che ha avuto origine un elemento.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. In alcuni casi questo è il risultato desiderato, in particolare se sono presenti gli elementi in questione nelle relazioni all'interno della composizione di un controllo.Sometimes this is the desired result, particularly if the elements in question exist in relationships within the compositing of a control.

Per gli eventi di input in particolare, gli eventi di anteprima anche condividono le istanze dei dati di evento con l'evento di bubbling equivalente.For input events specifically, Preview events also share event data instances with the equivalent bubbling event. Se si usa un gestore di classi di eventi di anteprima per contrassegnare l'evento di input gestita, il gestore di classi di evento di input bubbling non essere richiamato.If you use a Preview event class handler to mark the input event handled, the bubbling input event class handler will not be invoked. In alternativa, se si usa un gestore di istanze evento anteprima per contrassegnare l'evento come gestito, i gestori per l'evento di bubbling non saranno in genere essere richiamati.Or, if you use a Preview event instance handler to mark the event handled, handlers for the bubbling event will not typically be invoked. I gestori classi o gestori istanze possono essere registrati o collegati con la possibilità di essere richiamati anche se l'evento è contrassegnato come gestito, ma tale tecnica non viene usata comunemente.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.

Per altre informazioni sulla gestione delle classi e la sua relazione con eventi di anteprima, vedere contrassegno degli eventi indirizzati come gestiti e gestione delle classi.For more information about class handling and how it relates to Preview events see Marking Routed Events as Handled, and Class Handling.

Soluzioni alternative all'eliminazione di eventi da parte dei controlliWorking Around Event Suppression by Controls

Uno scenario in cui gli eventi di anteprima vengono comunemente usati è per la gestione di controllo composito di eventi di input.One scenario where Preview events are commonly used is for composited control handling of input events. In alcuni casi, l'autore del controllo evita la visualizzazione di un determinato evento originato dal loro controllo, ad esempio per sostituire un evento definito dal componente che contiene più informazioni o implica un comportamento più specifico.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. Ad esempio, un Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Button evita MouseLeftButtonDown e MouseRightButtonDown bubbling gli eventi generati dal Button o sui suoi elementi compositi a favore lo stato mouse capture e la generazione di un Click evento che viene sempre generato dal Button stesso.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. L'evento e i relativi dati comunque continuare lungo la route, tuttavia, poiché il Button contrassegna i dati dell'evento come Handled, solo i gestori per l'evento che espressamente indicato agiscono nel handledEventsToo case vengono richiamati.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. Se gli altri elementi verso la radice dell'applicazione voleva comunque la possibilità di gestire un evento eliminato di controllo, in alternativa è possibile associare i gestori nel codice con handledEventsToo specificato come 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. Ma spesso una tecnica più semplice consiste nel modificare la direzione di routing è gestire per l'equivalente di anteprima di un evento di input.But often a simpler technique is to change the routing direction you handle to be the Preview equivalent of an input event. Ad esempio, se un controllo sopprime MouseLeftButtonDown, provare a collegare un gestore per PreviewMouseLeftButtonDown invece.For instance, if a control suppresses MouseLeftButtonDown, try attaching a handler for PreviewMouseLeftButtonDown instead. Questa tecnica funziona solo per gli eventi di input di elementi di base, ad esempio MouseLeftButtonDown.This technique only works for base element input events such as MouseLeftButtonDown. Questi eventi di input usano coppie di tunneling/bubbling, generano entrambi gli eventi e condividono i dati dell'evento.These input events use tunnel/bubble pairs, raise both events, and share the event data.

Ognuna di queste tecniche ha effetti collaterali o le limitazioni.Each of these techniques has either side effects or limitations. L'effetto collaterale di gestione dell'evento di anteprima è che la gestione dell'evento a questo punto può disattivare i gestori che prevedono di gestire l'evento di bubbling e pertanto la limitazione è che in genere non è una buona idea per contrassegnare l'evento come gestito mentre è ancora attivata la Previ parte uova della 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. La limitazione del handledEventsToo tecnica è che non è possibile specificare un handledEventsToo gestore in XAMLXAML come un attributo, è necessario registrare il gestore dell'evento nel codice dopo aver ottenuto un riferimento all'oggetto per l'elemento in cui il gestore di è da collegare.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.

Vedere ancheSee also