2010-10-07 5 views
5

Utilizzo gli ultimi strumenti Phone 7 RTM (scaricati oggi, 7 ottobre 2010).Telefono 7 Controllo mappa Bing - Aggiungi una puntina da disegno quando si tocca

io sto cercando di fare una cosa semplice qui:

quando l'utente rubinetti una volta sul controllo mappa, voglio mettere una puntina da disegno lì. inoltre, voglio mantenere il normale comportamento integrato del controllo della mappa (toccare due volte per ingrandire).

(Se non è possibile mantenere entrambi i comportamenti, quindi forse una pressione prolungata sulla mappa per inserire il simbolo).

Quando si prova a capire questo fuori, mi sono imbattuto in questa documentazione delle modifiche apportate alla mappa di controllo per Phone7: http://msdn.microsoft.com/en-us/library/ff955762.aspx

poi ho visto la nuova classe MapInputEventArgs, che ha un membro ViewportPoint.

Quando guardando gli esempi di codice sul regolare Silverlight controllo mappa ho visto qualcosa di simile:

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)); 
    } 

Ma nel caso Phone7, non riesco a trovare il gestore di eventi appropriata, e non riuscivo a trovare chi usa MapInputEventArgs nel controllo mappa. La ricerca su google mi fa solo 1 risultato !!

Quindi, dov'è l'evento appropriato per "Tocca una volta" e come posso ottenere un ViewportPoint dopo che questo evento è stato attivato?

Grazie in anticipo.

risposta

6

Proprio capito questo, se si continua ad avere problemi.

I MouseLeftButtonUp e MouseLeftButtonDown eventi hanno un metodo getPosition che restituirà il punto il vostro ricerca

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

D'accordo, non è abbastanza, ma ho lo stesso problema e mi si avvicinò con una soluzione di sorta che entra in quando si rilascia le dita dallo schermo. Ho un'istanza di un booleano:

  bool noPin = false; 

ho quindi utilizzare questo per determinare se lo zoom o pan si sta facendo da parte dell'utente (questi fuoco tra gli eventi MouseLeftButtonDown e MouseLeftButtonUp). Durante l'evento Up, quindi, controllo se l'utente stava eseguendo lo zoom o il panning e, in caso contrario, posizionare la mia puntina.

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"; 
    } 

Non è bello ma, beh, è ​​stato il massimo che ho potuto gestire.

+0

Grazie! questo in realtà sembra una buona soluzione. Lo proverò. –

+0

Penso di aggiungere il pin nell'evento OnHold – Mahantesh

3

A meno che io sto leggendo la tua domanda sbagliata, questo sembra essere esattamente quello che stai cercando:

Silverlight - Add Pushpin to Bing Maps via C#

+0

Il controllo Bing Map utilizzato in WP7 è leggermente diverso dal controllo Silverlight.Ad esempio, il controllo WP7 non ha un evento MouseClick e la puntina non ha eventi MouseEnter e MouseLeave. –

Problemi correlati