通过画布形状向上冒泡

时间:2015-12-03 12:19:19

标签: c# wpf events shapes

假设已经创建了一个形状并将其添加到画布中。可以添加一个事件处理程序,让我们说一个鼠标左键按下事件:

System.Windows.Shapes.Rectangle r = new Rectangle(...);
r += r_MouseLeftButtonUp;
// Maybe other event handlers added...
Canvas.Children.Add(r);

所以这很有效。除非在与第一个形状重叠的同一画布上创建另一个形状,否则将触发事件处理程序。有没有办法通过鼠标光标位置下的所有形状启动mouseLeftButtonUp事件?

1 个答案:

答案 0 :(得分:0)

只要有可用于任何形状的可点击部分,重叠就应该有效。如果这里的问题是由于其上面的另一个形状(不再可点击)而变得隐藏的形状,您可以使用Canvas调用您的处理程序。

<Canvas UIElement.MouseLeftButtonUp="Canvas_MouseLeftButtonUp">
    <Rectangle x:Name="rec1" Height="50" Width="50" Canvas.Left="0" Canvas.Top="0" Fill="Aqua"/>
    <Rectangle x:Name="rec2" Height="50" Width="50" Canvas.Left="25" Canvas.Top="25" Fill="LightBlue"/>
 </Canvas>

当您左键单击Canvas时,这将设置EventHandler。我们可以在画布的每个Shape子元素上调用处理程序。

 private void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
        Canvas c = sender as Canvas;
        foreach (Rectangle r in c.Children)
        {
           // Invoke the handler here...
        }
  }