C# 防止在存在'时触发父事件;s还引发了子控件事件
我不太确定如何命名它,但是,假设我在C# 防止在存在'时触发父事件;s还引发了子控件事件,c#,wpf,mouseevent,C#,Wpf,Mouseevent,我不太确定如何命名它,但是,假设我在画布的中心有3个红色的矩形 如果我单击一个矩形,颜色将变为蓝色,如果我在画布中单击而不是矩形,则每个蓝色矩形将颜色切换回红色 我的问题是:如果我创建了2个MouseLeftButtonDown事件,每个事件用于矩形-s,另一个事件用于画布,那么如果我单击矩形,那么画布上的MouseLeftButtonDown事件也会在矩形事件之后触发 问题:如果存在同时单击的子控件,如何防止触发Canvas\u MouseLeftButtonDown(父控件)事件 谢谢 更新
画布的中心有3个红色的矩形
如果我单击一个矩形
,颜色将变为蓝色,如果我在画布
中单击而不是矩形
,则每个蓝色矩形
将颜色切换回红色
我的问题是:如果我创建了2个MouseLeftButtonDown
事件,每个事件用于矩形
-s,另一个事件用于画布
,那么如果我单击矩形
,那么画布上的MouseLeftButtonDown
事件也会在矩形
事件之后触发
问题:如果存在同时单击的子控件,如何防止触发Canvas\u MouseLeftButtonDown
(父控件)事件
谢谢
更新+代码:
这是矩形
事件:
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change clicked rectangle color to blue
}
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change all Child rectangle color back to red
}
这是Canvas
事件:
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change clicked rectangle color to blue
}
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change all Child rectangle color back to red
}
我在一句话中想要的是:如果“矩形”事件触发,“画布”事件被阻止触发
由于in方法代码与问题不太相关,因此我将其删除以使其看起来更简单。您可以在矩形.MouseLeftButtonDown
处理程序中设置为true
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
来自MSDN
标记已处理的事件将限制已路由事件对事件路由沿线的侦听器的可见性。该事件仍然会在路由的其余部分传递,但只有在AddHandler(RouteEvent、Delegate、Boolean)方法调用中专门添加了HandledEventsTo 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
}
}