我不太确定如何授权它,但是,我说我Rectangle的中心有3个红色Canvas.
如果我点击a 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
}
Run Code Online (Sandbox Code Playgroud)
这是Canvas事件:
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//Change all Child rectangle color back to red
}
Run Code Online (Sandbox Code Playgroud)
我想要的一句话:如果"矩形"事件触发,则禁止"画布"事件触发.
由于方法内代码与问题不太相关,因此我将其删除以使其看起来更简单.
dko*_*ozl 10
您可以Handled在Rectangle.MouseLeftButtonDown处理程序中设置为true
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
来自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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |