2010-10-07 14 views
5

Używam najnowszych narzędzi Phone 7 RTM (pobrałem go dzisiaj, 7 października 2010).Telefon 7 Sterowanie mapą Bing - Dodaj pinezkę po dotknięciu

Próbuję zrobić prostą rzecz tutaj:

gdy użytkownik zawory raz o kontroli mapy, chcę tam umieścić pinezkę. również chcę zachować regularne zachowanie wbudowane kontrolki mapy (dotknij dwukrotnie, aby powiększyć).

(Jeśli nie można zachować obu zachowań, być może długie naciśnięcie mapy spowoduje wstawienie pinezki).

Gdy próbuje dowiedzieć się tego, natknąłem tej dokumentacji zmian dokonanych na mapie sterowania dla Phone7: http://msdn.microsoft.com/en-us/library/ff955762.aspx

Potem zobaczyłem nową klasę MapInputEventArgs, który posiada człon ViewportPoint.

Patrząc na przykłady kodu na regularne SilverLight mapy sterowania widziałem coś takiego:

private void OnMouseClick(object sender, MapMouseEventArgs e) 
    { 
     Point clickLocation = e.ViewportPoint; 
     Location location = x_Map.ViewportPointToLocation(clickLocation); 

     Pushpin pushpin = new Pushpin(); 
     m_PushpinLayer.AddChild(pushpin, new Location(latitude, longitude)); 
    } 

Jednak w przypadku Phone7, nie mogę znaleźć odpowiednią procedurę obsługi zdarzenia, a ja nie mogłem znaleźć kto używa MapInputEventArgs w formancie mapy. Przeszukanie go w google daje mi tylko 1 wynik !!

Gdzie jest odpowiednie wydarzenie dla "Stuknij raz" i jak mogę uzyskać ViewportPoint po wystrzeleniu tego wydarzenia?

Z góry dziękuję.

Odpowiedz

6

tylko zorientowaliśmy się, jeśli nadal występują problemy.

W MouseLeftButtonUp i MouseLeftButtonDown wydarzenia mają metodę getPosition że powróci do punktu szukasz

private void MapMain_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 

     Point p = e.GetPosition(this.MapMain); 
     GeoCoordinate geo = new GeoCoordinate(); 
     geo = MapMain.ViewportPointToLocation(p); 
     MapMain.ZoomLevel = 17; 
     MapMain.Center = geo; 
     //---create a new pushpin--- 
     Pushpin pin = new Pushpin(); 

     //---set the location for the pushpin--- 
     pin.Location = geo; 

     //---add the pushpin to the map--- 
     MapMain.Children.Add(pin); 
    } 
1

Okej, to nie jest ładne, ale mam ten sam problem i wymyśliłem obejście tego rodzaju, które pojawia się po zwolnieniu palców z ekranu. I instancji wartość logiczną:

  bool noPin = false; 

I wtedy to wykorzystać do określenia, czy zoom czy pan jest wykonywana przez użytkownika (te ognia między wydarzeniami MouseLeftButtonDown i MouseLeftButtonUp). W przypadku zdarzenia Up sprawdzam, czy użytkownik powiększał lub przesuwał, a jeśli nie, umieść moją pinezkę.

private void mHome_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     noPin = false; 
    } 

    private void mHome_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (!noPin) 
      PlacePushPin(); 
    } 

    private void mHome_MapPan(object sender, MapDragEventArgs e) 
    { 
     tbTemp.Text += "pan"; 
    } 

    private void mHome_MapZoom(object sender, MapZoomEventArgs e) 
    { 
     tbTemp.Text += "zoom"; 
    } 

To nie jest piękne, ale, cóż, to było najlepsze, co mogłem poradzić.

+0

Dzięki! to wygląda na miłe obejście. Spróbuję tego. –

+0

Myślę, że lepiej dodać pin w OnHold Event – Mahantesh

3

ile Czytam Twoje pytanie źle, to wydaje się być dokładnie to, czego szukasz:

Silverlight - Add Pushpin to Bing Maps via C#

+0

Formant Bing Map używany w WP7 jest nieco inny niż kontrolka Silverlight.Na przykład formant WP7 nie ma zdarzenia MouseClick, a Pinezka nie ma zdarzeń MouseEnter i MouseLeave. –