4

我有两个控件 A 和 B。控件 B 放置在 A 上。当单击 B 时,仅触发它的单击事件,但是我也需要触发 A 的单击事件。这可以使用路由事件以某种方式实现吗?

这是控件的屏幕截图:

替代文字 http://www.imagebanana.com/img/hu5znv4/buttons.png

当然,这种情况只是一个简化的示例,我正在寻找一种通用方法来在鼠标光标下方/在一个位置的所有控件上引发事件。然而,这个问题的具体解决方案也会对我有所帮助!非常感谢您的任何提示!

4

1 回答 1

2

如果内部控件的事件处理程序将 e.Handled 属性设置为 true,就会发生这种情况。这将防止路由事件进一步冒泡。但我只是检查了一下,在 WPF 4 中看不到这种行为。

如果 e.Handled 正在阻止您的事件,那么您可以做的是使用UIElement.AddHandler重载,该重载采用布尔值handledEventsToo 参数来连接您的点击事件。这必须在代码中完成,而不是标记。然后您应该在外部控件中收到 Click 事件,并且 e.Handled 属性将已设置为 true。

当我单击内部按钮时,以下代码确实设置了两个按钮的背景。

<Grid>
    <Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
        <Button Width="100" Height="25" Margin="20" Click="Click2" />
    </Button>
</Grid>

代码背后

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
}
于 2010-07-01T13:55:25.473 回答