2014-10-27 36 views

回答

1

是的。如果您想在某人點擊MapIcon(圖釘)時做某些事情,請在地圖上添加一個水龍頭,然後使用Map.FindMapElementsAtOffset方法搜索與觸摸點相交的元素:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.controls.maps.mapcontrol.findmapelementsatoffset.aspx

或者Map .FindSubElementsForTouchTargeting方法:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.uielement.findsubelementsfortouchtargeting.aspx

當涉及到將數據存儲或關聯到圖釘時,我喜歡將數據存儲在標準Tag屬性中,因爲這是WPF和Silverlight一段時間的工作。您會注意到MapIcon/MapElement類沒有Tag屬性,但它們是DependancyObjects,這意味着我們可以輕鬆地爲這些類添加自定義屬性。這是我經常在WP應用程序中爲這些類添加Tag屬性的簡單擴展。

public static class MapElementExt 
{ 
    public static readonly DependencyProperty TagProperty = DependencyProperty.Register("Tag", typeof(object), typeof(MapElement), new PropertyMetadata(null)); 
} 

然後,您可以設置這個值是這樣的:

pushpin.SetValue(MapElementExt.TagProperty, MyPinData); 

個人而言,當涉及到圖釘我通常不惹的MapIcon/MapElement類,只是創建我的圖釘一個的UIElement 。通過這樣做,我可以輕鬆地創建我的圖釘,並且還可以輕鬆添加Tap事件。您可以指定這樣的UIElement的位置:

MapControl.SetLocation(pushpin, MyGeopoint); 

然後將圖釘添加到Map.Children屬性中。

如果要通過觸摸事件獲取地圖上隨機選擇的點的座標,可以從點擊事件中獲取像素座標,並通過Map.GetLocationFromOffset方法傳遞它們。例如:

MyMap.Tapped += (s, e) => 
{ 
    Geopoint loc; 
    MyMap.GetLocationFromOffset(e.GetPosition(MyMap), out loc); 
}; 
+0

一旦我添加pushpin.SetValue(MapElementExt.TagProperty,MyPinData);如何檢索OnMapTapped事件中的標記值?或者如果UIElement是更好的選擇,你是否有鏈接樣本?謝謝。 – Juan 2014-10-27 22:28:03

+0

嘗試類似: var val =(sender as UIElement).GetValue(MapElementExt.TagProperty);如果(val!= null) var MyPinData = val as MyObjectType; – rbrundritt 2014-10-28 07:42:22

+0

我一定會錯過一些導致它不能正常工作的東西。 mapIcon.SetValue(MapElementExt.TagProperty,location.LocationId);然後在我的地圖中點擊var val =(發件人爲UIElement).GetValue(MapElementExt.TagProperty);但val是空的。 – Juan 2014-10-28 23:18:54

相關問題