我正在尝试创建一个具有地图控件的Windows Phone 8.1(运行时)应用程序。我想在OnMappedTapped事件中附加其他数据,或者在有人点击MapIcon时获取指定的位置ID。这可能吗?
答案 0 :(得分: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属性。
如果要通过触摸事件获取地图上随机选择点的坐标,可以从tap事件中获取像素坐标,并将它们传递给Map.GetLocationFromOffset方法。例如:
MyMap.Tapped += (s, e) =>
{
Geopoint loc;
MyMap.GetLocationFromOffset(e.GetPosition(MyMap), out loc);
};