我不太确定如何授权它,但是,我说在Rectangle
的中心有3个红色Canvas
。
如果我点击Rectangle
,颜色会变为蓝色,如果我在Canvas
但不是Rectangle
内点击,则每个蓝色Rectangle
切换颜色变回红色。
我的问题是这样的:如果我发出2 MouseLeftButtonDown
个事件,Rectangle
- s和另一个事件是Canvas
,那么如果我点击Rectangle
} Canvas_MouseLeftButtonDown
事件也在Rectangle
之后触发。
问题:如果有一个也点击的子控件,如何阻止Canvas_MouseLeftButtonDown
(父控件)事件被触发。
感谢。
更新+代码:
这是Rectangle
事件:
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change clicked rectangle color to blue
}
这是Canvas
事件:
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change all Child rectangle color back to red
}
我想要的一句话:如果“矩形”事件触发,则会阻止“画布”事件触发。
由于方法内代码与问题不太相关,因此我将其删除以使其看起来更简单。
答案 0 :(得分:8)
您可以在Rectangle.MouseLeftButtonDown
处理程序
Handled
设置为true
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
来自MSDN
标记处理的事件将限制路由事件在事件路径上对侦听器的可见性。该事件仍然在路由的剩余部分中传播,但只有在AddHandler(RoutedEvent,Delegate,Boolean)方法调用中专门添加了HandledEventsToo true的处理程序才会在响应中被调用
编辑
作为替代解决方案,您只能保留Canvas.MouseLeftButtonDown
事件处理程序,并为Rectangle
删除一个,然后执行类似的操作
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.OriginalSource is Rectangle)
{
var myRectangle = e.OriginalSource as Rectangle;
//your code for Rectangle clicked
}
else if (e.OriginalSource is Canvas)
{
var myCanvas = e.OriginalSource as Canvas;
//your code for Canvas clicked
}
}