1

我有一组图钉,我已经为 foreach 中的所有图钉添加了点击事件。现在我需要找出点击了哪个图钉,以便相应地执行操作。下面是我的示例代码。

 private void setpins()
 {
            Pushpin pin = null;    

            lstpin.Add(new clsPushpin() { stores = "chennai", _loc= new locations() { lat = 13.04, longd = 80.17 } });
            lstpin.Add(new clsPushpin() { stores = "Karur", _loc = new locations() { lat = 10.58, longd = 78.07 } });
            lstpin.Add(new clsPushpin() { stores = "coimbatore", _loc = new locations() { lat = 11.00, longd = 77.00 } });

            foreach (clsPushpin cls in lstpin)
            {
                pin = new Pushpin();
                GeoCoordinate geo = new GeoCoordinate(cls._loc.lat, cls._loc.longd);
                pin.Location = geo;
                pin.Background = new SolidColorBrush(new Color() { A = 255, R = 0, G = 100, B = 120 });
                pin.Foreground = new SolidColorBrush(Colors.White);
                mymap.Children.Add(pin);
                pin.MouseLeftButtonUp += new MouseButtonEventHandler(pushpintap);
            }
            mymap.Center = pin.Location;
            mymap.SetView(pin.Location, 5.0);
  }

  private void pushpintap(object sender, MouseButtonEventArgs e)    
  {
      //Messagebox are what ever    
      MessageBox.Show("My lat long is:"+lat,+long);    
  }

使用上面的代码片段,最后一个图钉的值被保存。但我想找到被选中通知/弹出相应的确切引脚。提前谢谢。

4

3 回答 3

2

您可以执行以下操作:

将 clsPushpin 对象存储在 Pushpin Tag 属性中。

在图钉单击事件中,将 sender.tag 转换为 clsPushpin 对象以获取该图钉的数据。

        foreach (clsPushpin cls in lstpin)
        {
            pin = new Pushpin();
            GeoCoordinate geo = new GeoCoordinate(cls._loc.lat, cls._loc.longd);
            pin.Location = geo;
            pin.Background = new SolidColorBrush(new Color() { A = 255, R = 0, G = 100, B = 120 });
            pin.Foreground = new SolidColorBrush(Colors.White);
            mymap.Children.Add(pin);
            pin.MouseLeftButtonUp += new MouseButtonEventHandler(pushpintap);
            pin.Tag = cls;
        }

然后在您的 pushpintap 事件处理程序中执行以下操作:

  private void pushpintap(object sender, MouseButtonEventArgs e)    
  {
  //Messagebox are what ever    
    clsPushpin cls = sender.tag as clsPushpin;

    MessageBox.Show("My lat long is:"+cls.lat.ToString()+","+cls.long.ToString());    
  }

您可能应该使用数据绑定将数据绑定到图钉集合。

于 2012-10-02T11:53:04.877 回答
1

您应该senderpushpintap事件中查询以找出被点击的引脚的详细信息。

于 2012-09-24T22:10:21.513 回答
0

我遇到了类似的问题,正在寻找解决方案,我找到了您的问题。我所做的是定义一个MouseButtonEventHandler动态创建的方法。例如,如果您想显示有关每个cls对象的信息,您可以定义下一个方法:

    public MouseButtonEventHandler getHandler(clsPushpin cls)
    {
        return delegate(object sender, MouseButtonEventArgs e)
            {
                MessageBox.Show(cls.stores+" at "+cls._loc.lat+","+cls._loc.longd);
            };
    }

并在每次创建/添加时调用它Pushpin

pin.MouseLeftButtonUp += getHandler(cls);

【我试过不定义getHandler方法就直接做(也就是pin.MouseLeftButtonUp += delegate(...:)还是不行】

于 2012-10-15T23:28:39.313 回答