【发布时间】:2014-10-27 00:55:18
【问题描述】:
我正在尝试创建一个带有地图控件的 Windows Phone 8.1(运行时)应用程序。我想将其他数据附加到 OnMappedTapped 事件或当有人单击 MapIcon 时获取分配的位置 ID 的方法。这可能吗?
【问题讨论】:
标签: windows-phone-8.1 bing-maps
我正在尝试创建一个带有地图控件的 Windows Phone 8.1(运行时)应用程序。我想将其他数据附加到 OnMappedTapped 事件或当有人单击 MapIcon 时获取分配的位置 ID 的方法。这可能吗?
【问题讨论】:
标签: windows-phone-8.1 bing-maps
是的。如果您想在有人单击 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);
};
【讨论】: