OnMapTapped事件中的Windows Phone 8.1(运行时)附加数据

时间:2014-10-27 00:55:18

标签: windows-phone-8.1 bing-maps

我正在尝试创建一个具有地图控件的Windows Phone 8.1(运行时)应用程序。我想在OnMappedTapped事件中附加其他数据,或者在有人点击MapIcon时获取指定的位置ID。这可能吗?

1 个答案:

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