【问题标题】:Detect which rectangle has been clicked in Canvas WPF检测在 Canvas WPF 中单击了哪个矩形
【发布时间】:2015-04-16 08:21:48
【问题描述】:

我有一个 WPF 画布,以编程方式填充了一系列矩形(假设为 100,但数量每次都不同)。 我的问题是我需要检测用户点击了哪个矩形。 我想为每个矩形分配一个不同的唯一名称和相同的事件“MouseLeftButtonDown”,但是我不知道如何获取已单击对象的名称。 任何人都可以帮助我吗?还有可能检查鼠标单击屏幕的哪个点,获取坐标,然后计算该点周围的哪个矩形,但对于这样一个愚蠢的问题来说,这似乎太复杂了。 提前谢谢!

【问题讨论】:

  • 尝试发布一些代码,你尝试了什么,你卡在哪里:)
  • 不知道怎么获取被点击的对象的Name。 ---MouseButtonEventHandler中有一个sender跨度>

标签: wpf canvas click rectangles


【解决方案1】:

尝试使用画布事件:

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】:

    如果所有矩形都绑定到 OnMouseDownEvent 到 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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 2012-09-19
      • 2016-02-08
      • 2014-09-01
      相关资源
      最近更新 更多