2012-09-24 4 views
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);  
    } 

위의 스 니펫을 사용하면 마지막 압핀 값이 저장됩니다. 하지만 정확한 핀을 찾아서 알려주고 싶다. 미리 Thx.

답변

2

당신은 다음 작업을 수행 할 수 있습니다 :

저장합니다 압정 태그 속성에 clsPushpin 객체입니다.

푸시 핀 클릭 이벤트에서 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());  
    } 

.

1

도청 된 핀의 세부 사항을 확인하려면 pushpintap 이벤트의 sender을 쿼리해야합니다.

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(...)를 정의하지 않고 직접 작동하지 않습니다.