Haga clic en evento para los controles por debajo de otros controles
-
01-10-2019 - |
Pregunta
Tengo dos controles A y B. Control B se coloca sobre A. Cuando se hace clic en B evento sólo se hace clic se dispara, sin embargo necesito el evento click de A a fuego también. Esto de alguna manera puede ser realizado usando eventos enrutados?
Aquí hay una captura de pantalla de los controles:
alt text http://www.imagebanana.com/img/hu5znv4/buttons .png
Por supuesto, este caso es sólo un ejemplo reducida, estoy buscando una manera general a los acontecimientos plantean en todos los controles debajo del cursor del ratón / en un solo lugar. Hoewever, una solución concreta a este problema me ayudaría también! Muchas gracias por cualquier pista!
Solución
Esto puede ocurrir si el controlador de eventos del control interno se define la propiedad e.Handled true. Esto evitaría que el evento enrutado de burbujeo más. Pero acabo de comprobar y no veo que el comportamiento en WPF 4.
Si e.Handled está impidiendo su evento, lo que puede hacer sin embargo es utilizar el UIElement.AddHandler sobrecarga que toma un parámetro booleano handledEventsToo para conectar su evento click. Esto tiene que ser hecho en código, no de marcas. Entonces usted debe recibir el evento Haga clic en el control externo y la propiedad e.Handled ya estará establecido en true.
El siguiente código no establece el fondo de los botones cuando hago clic en el botón interior.
<Grid>
<Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
<Button Width="100" Height="25" Margin="20" Click="Click2" />
</Button>
</Grid>
Código Detrás
private void Click1( object sender, RoutedEventArgs e )
{
( (Button)sender ).Background = new SolidColorBrush( Colors.Blue );
}
private void Click2( object sender, RoutedEventArgs e )
{
( (Button)sender ).Background = new SolidColorBrush( Colors.Red );
//e.Handled = true; // uncomment to stop bubbling
}