我有两个控件 A 和 B。控件 B 放置在 A 上。当单击 B 时,仅触发它的单击事件,但是我也需要触发 A 的单击事件。这可以使用路由事件以某种方式实现吗?
这是控件的屏幕截图:
替代文字 http://www.imagebanana.com/img/hu5znv4/buttons.png
当然,这种情况只是一个简化的示例,我正在寻找一种通用方法来在鼠标光标下方/在一个位置的所有控件上引发事件。然而,这个问题的具体解决方案也会对我有所帮助!非常感谢您的任何提示!
我有两个控件 A 和 B。控件 B 放置在 A 上。当单击 B 时,仅触发它的单击事件,但是我也需要触发 A 的单击事件。这可以使用路由事件以某种方式实现吗?
这是控件的屏幕截图:
替代文字 http://www.imagebanana.com/img/hu5znv4/buttons.png
当然,这种情况只是一个简化的示例,我正在寻找一种通用方法来在鼠标光标下方/在一个位置的所有控件上引发事件。然而,这个问题的具体解决方案也会对我有所帮助!非常感谢您的任何提示!
如果内部控件的事件处理程序将 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
}