In comune con gli altri framework visuali dell'ambiente .NET, in Silverlight, gli eventi di tipo Routed si propagano lungo tutta la catena padre/figlio dei controlli, secondo il fenomeno definito "bubbling" degli eventi.
Ad esempio, durante la scrittura all'interno di una TextBox, gli eventi KeyDown e KeyUp possono essere gestiti dal controllo stesso ma anche da ogni controllo "padre" che contiene la TextBox, compreso lo UserControl principale.
La sottoscrizione agli eventi può essere fatta da markup, oppure con la nota sintassi:
LayoutRoot.KeyDown += new KeyEventHandler(LayoutRoot_KeyDown); TextBox1.KeyDown += new KeyEventHandler(TextBox1_KeyDown);
Con questa modalità, il bubbling dell'evento può essere interrotto valorizzando a true la proprietà Handled del RoutedEventArgs parametro del gestore:
private void TextBox1_KeyDown(object sender, KeyEventArgs e) { e.Handled = true; }
In questo caso l'event handler "LayoutRoot_KeyDown" del nostro esempio non viene richiamato.
Per poter sottoscrivere un evento indipendentemente che uno dei controlli figlio ne abbiamo dichiarato la gestione, è possibile registrarsi con il metodo AddHandler, specificando l'evento, il delegato:
LayoutRoot.AddHandler(UIElement.KeyDownEvent, new KeyEventHandler(LayoutRoot_KeyDown), true);
Con l'ultimo parametro settato a true impostiamo proprio di mettersi in ascolto ad eventi
formalmente gestiti da altri metodi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.