2013-05-24 17 views

risposta

30

WPF ci fornisce una serie di diversi meccanismi per la gestione degli eventi: sono bubbling, tunneling e direct. Questi sono tutti noti come eventi instradati .

evento diretto

Probabilmente si sta già utilizzati per l'evento indirizzato diretta. Questo è dove l'elemento stesso gestisce l'evento che si è verificato. Un buon esempio di sarebbe la gestione di onClick -event di un pulsante del mouse in standard WinForms. È qui che l'evento viene generato nella voce della GUI e ottiene gestito da detto elemento della GUI.

Bubbling Evento

Ora sappiamo tutti come alcune bolle in una forma o nell'altra. Bubbling succede a quando l'evento non è gestito dall'elemento (ad esempio un textbox) e l'evento "bolle" raggiunge i contenitori dell'interfaccia utente che lo contengono. Per esempio , diciamo che hai una finestra che contiene un pannello e all'interno di quel pannello hai una griglia e all'interno della griglia hai una casella di testo. Se l'evento non viene gestito dalla casella di testo, quindi si sposta, viene passato o "bolle" fino al livello di griglia (poiché la griglia contiene la casella di testo), se non viene gestito a quel livello quindi l'evento bolle ulteriormente su "albero" (noto come albero visivo) al pannello in cui è possibile o meno essere gestito. Questo processo continua fino a quando non viene gestito o l'evento "fugge" l'elemento più in alto.

Gli esempi di un evento di bubbling potrebbero essere qualcosa di simile a un evento MouseButtonDown. O un evento Keydown.

Tunneling

Tunneling è l'opposto di ribollimento. Quindi, invece di un evento che va a "su" l'albero visivo, l'evento viaggia lungo l'albero visivo verso l'elemento che è considerato la fonte. La definizione standard di WPF denominata di un evento di tunneling è che iniziano tutti con "anteprima" ad esempio previewdownkey e previewmousebuttondown. Puoi catturarli mentre si dirigono verso l'elemento "target" e gestirlo. Un esempio di potrebbe essere che tu abbia alcuni controlli all'interno di un controllo di griglia e per qualche motivo hai deciso che nessun controllo all'interno di a quella griglia sarà permesso di avere la lettera "t" raggiungerlo.

Source con il parere dell'autore che non supporto o non sono d'accordo con.

And another StackOverflow question which is pretty much the same.

A nice demo project

And last but not least some explanation and another tutorial.

+1

Davvero buona spiegazione, grazie +1. A proposito, il link per "Un bel progetto demo" è morto. – Sabuncu

2

Per cominciare: la convenzione di denominazione in WPF per alcuni eventi di default è Preview<event> per il tunneling e <event> per bubbling. Così ad esempio per KeyDown avremmo PreviewKeyDown e KeyDown, tunneling e bubbling rispettivamente.

La differenza tra i due, come implica la convenzione di denominazione, è che un evento di tunneling inizierà dal nodo più alto nell'albero (probabilmente la finestra) e scenderà al minore. Un evento spumeggiante inizierà dal bambino e poi salirà di nuovo.

Questa guida dovrebbe spiegare chiaramente: http://www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events