Silverlight 2 beta 2 - Event Bubbling

Con la beta 2 di Silverlight 2 ci sono dei cambiamenti nel modo in cui viene gestito il bubbling degli eventi in Silverlight. Con questo termine ci si riferisce alla funzionalità per cui alcuni eventi, quelli definiti in UIElement, che vengono scatenati su un elemento presente nel layout dell’applicazione vengo “portati” su e possono essere gestiti anche dagli handler(se presenti) di quegli elementi che li contengono. Mi spiego con un esempio: se inserisco un rettangolo in una griglia e premo il pulsante sinistro sul rettangolo questo evento può essere gestito (se presente) da un handler definito sul rettangolo e da un handler nel contenitore del rettangolo stesso (quindi la griglia nel nostro esempio). Questi eventi che possono essere gestiti da questo meccanismo di “Event Bubling” vengono definiti come Routed Events.

Se non vogliamo che l’evento venga gestito da altri handler più esterni, basta impostare la proprietà e.Handled = true come prima proprietà all’interno del handler dell’evento (“ e” è il parametro di tipo EventArgs specializzato che arriva nel metodo).

Per chi conosce WPF: non esiste con la beta 2 di SL 2 la possibilità di registrarsi ad un evento di tipo “handledEventsToo”. Il comportamento della beta 2 è diverso rispetto a quello che succedeva con la beta 1.

Mi potrei aspettare che la stessa cosa succeda anche se inserissi un bottone e volessi gestire l’evento MouseLeftButtonDown. Con la beta 1 questo era vero, ma non con la beta 2 in cui questo evento è intrinsecamente già gestito e quindi “non scatta” e non può essere gestito. Se volete dunque gestire l’evento di click nel caso di un bottone dovete utilizzare l’evento Click, che è anche la cosa più intuitiva da fare. Potete anche leggere questo post per un esempio più dettagliato.

Link utili:

Se volete qualche dettaglio in più sulla gestionde degli eventi in Silverlight potete leggere a questo link oppure consultare la documentazione MSDN su Events Overview in Silverlight 2.