单击其他控件下方控件的事件

时间:2010-07-01 13:43:43

标签: wpf events routed-events

我有两个控件A和B.控件B放在A上。当点击B时,它的点击事件被触发,但是我也需要点击事件A来触发。这可以通过路由事件以某种方式实现吗?

以下是控件的屏幕截图:

alt text http://www.imagebanana.com/img/hu5znv4/buttons.png

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

1 个答案:

答案 0 :(得分:2)

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

如果e.Handled阻止了您的事件,那么您可以使用UIElement.AddHandler重载,该重载采用布尔的processedEventsToo参数来挂接您的click事件。这必须在代码中完成,而不是标记。然后你应该在外部控件中收到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
}