我有两个控件A和B.控件B放在A上。当点击B时,它的点击事件被触发,但是我也需要点击事件A来触发。这可以通过路由事件以某种方式实现吗?
以下是控件的屏幕截图:
alt text http://www.imagebanana.com/img/hu5znv4/buttons.png
当然这个案例只是一个简化的例子,我正在寻找一种在鼠标光标/一个位置下的所有控件上引发事件的一般方法。 Hoewever,这个问题的具体解决方案对我也有帮助!非常感谢您的任何提示!
答案 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
}