有沒有人有任何洞察到如何在運行芒果的WP7客戶端上的地圖上實現可拖動圖釘?我有一個圖釘綁定到地圖上的地理位置,我希望用戶能夠將其拖動到地圖上並記錄它的新位置。我已經看到了一些資源,但它們是針對非WP7 Bing Maps控件的。任何幫助,將不勝感激。WP7在地圖上拖動圖釘
謝謝!
有沒有人有任何洞察到如何在運行芒果的WP7客戶端上的地圖上實現可拖動圖釘?我有一個圖釘綁定到地圖上的地理位置,我希望用戶能夠將其拖動到地圖上並記錄它的新位置。我已經看到了一些資源,但它們是針對非WP7 Bing Maps控件的。任何幫助,將不勝感激。WP7在地圖上拖動圖釘
謝謝!
e.GetPosition(元)給出相對於元素的位置傳遞參數。另外,使用ViewportPointToLocation進行轉換的點必須與地圖的位置相關。所以,你必須做到以下幾點:
Pushpin myPin = sender as Pushpin;
Point p = e.GetPosition(**Map**);
g = Map.ViewportPointToLocation(p);
如果有人好奇,這是我想出瞭解決方案:
XAML:
<map:Map x:Name="Map" Height="400" HorizontalAlignment="Left" Margin="6,10,0,0" VerticalAlignment="Top" Width="444" ZoomLevel="19" >
<map:Map.Mode><map:AerialMode /></map:Map.Mode>
<map:Pushpin x:Name="Pin" Background="Green" IsHitTestVisible="True" IsEnabled="True">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="Pushpin_OnDragDelta" DragStarted="Pushpin_OnDragStarted" DragCompleted="Pushpin_OnDragCompleted">
</toolkit:GestureListener>
</toolkit:GestureService.GestureListener>
<map:Pushpin.RenderTransform>
<TranslateTransform></TranslateTransform>
</map:Pushpin.RenderTransform>
</map:Pushpin>
</map:Map>
的.cs:
private void Pushpin_OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
Pushpin myPin = sender as Pushpin;
TranslateTransform transform = myPin.RenderTransform as TranslateTransform;
transform.X += e.HorizontalChange;
transform.Y += e.VerticalChange;
}
private void Pushpin_OnDragStarted(object sender, DragStartedGestureEventArgs e)
{
Map.IsEnabled = false; // prevents the map from dragging w/ pushpin
}
private void Pushpin_OnDragCompleted(object sender, DragCompletedGestureEventArgs e)
{
Map.IsEnabled = true;
}
有沒有人必須對如何任何想法提取圖釘新位置的地理座標?我想下面的代碼在事件處理程序,並沒有給出正確的座標:
Pushpin myPin = sender as Pushpin;
Point p = e.GetPosition(myPin);
g = Map.ViewportPointToLocation(p);
myPin.location給老座標
我知道這是一個遲到的反應,但我工作的一個類似的項目,並使用類似的辦法,所以我想我會分享。這是我的第一篇文章與我,但我的方法,我曾經是那麼幹淨:
創建兩個全局雙變量來保存X,Y座標的:
double mapLocX;
double mapLocY;
這些全球雙打設置爲點的位置圖釘在你DragStarted事件:
Point point = myMap.LocationToViewportPoint(myPin.Location);
mapLocX = point.X;
mapLocY = point.Y;
在你dragDelta情況下,更改這些變量爲您將圖釘:
mapLocX += e.HorizontalChange;
mapLocY += e.VerticalChange;
現在在DragCompleted上創建一個新的點,它接受我們渲染的全局變量,並將它們映射到地理座標,這裏是踢球者;從的ObservableCollection中刪除我們的舊針(我的是位置),並在新的圖釘在我們新增加的座標:
Point point = new Point(mapLocX, mapLocY);
GeoCoordinate geoCoord = new GeoCoordinate();
geoCoord = myMap.ViewportPointToLocation(point);
Locations.Remove(myPin.Location);
Locations.Add(geoCoord);
希望這有助於
你想擁有你的UI元素不是你的手指的起源對?試試這個:
Point pM = e.GetPosition(**Map**);
Point pE = e.GetPosition(**UIElement**);
Point origin = new Point(pM.X - pE.X, pM.Y - pE.Y);
GeoCoordinate g = Map.ViewportPointToLocation(origin);