在Canvas WPF中检测哪个矩形被点击了

4
我有一个WPF画布,通过编程方式填充了一系列矩形(假设为100个,但每次数量不同)。我的问题是我需要检测用户点击了哪个矩形。我考虑给每个矩形分配不同的唯一名称,然后为每个矩形分配相同的 “MouseLeftButtonDown” 事件,但我不知道如何获取所点击对象的名称。是否有人能帮忙解决这个问题?还可以检查鼠标单击屏幕的哪个点,获取坐标,然后计算哪个矩形在该点附近,但对于这样一个愚蠢的问题来说,这似乎太复杂了。谢谢!

尝试发布一些代码,说明你尝试了什么,卡在哪里了 :) - Dragos Stoica
请参见:https://dev59.com/knNA5IYBdhLWcg3wKacx - goobering
我不知道如何获取被点击的对象的名称。在MouseButtonEventHandler中有一个“sender”。 - Bolu
2个回答

2
尝试使用canvas事件:
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
      if (e.OriginalSource is Rectangle)
      {
        Rectangle ClickedRectangle = (Rectangle)e.OriginalSource;

        // Your work here I give y some actions ...
        ClickedRectangle.Opacity = 0.5;
        if (e.ClickCount == 2)
        {
          canvas.Children.Remove(ClickedRectangle);
        }
        else
        {
          isPressed = true;
          startPosition = e.GetPosition(canvas);
          ClickedRectangle.CaptureMouse();
        }
      }
    }

2
如果所有的矩形都绑定在OnMouseDown事件上,绑定到Rectangle_OnMouseDown函数,您可以通过名称获取您的矩形,方法如下:
private void Rectangle_OnMouseDown(object sender, MouseButtonEventArgs e)
    {
        var mouseWasDownOn = e.Source as FrameworkElement;
        if (mouseWasDownOn != null)
        {
            string elementName = mouseWasDownOn.Name;
            var myRectangle = (Rectangle)this.FindName(elementName);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接