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!

¿Fue útil?

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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top