【问题标题】:Windows Phone 8.1 (runtime) additional data in OnMapTapped eventOnMapTapped 事件中的 Windows Phone 8.1(运行时)附加数据
【发布时间】:2014-10-27 00:55:18
【问题描述】:

我正在尝试创建一个带有地图控件的 Windows Phone 8.1(运行时)应用程序。我想将其他数据附加到 OnMappedTapped 事件或当有人单击 MapIcon 时获取分配的位置 ID 的方法。这可能吗?

【问题讨论】:

    标签: windows-phone-8.1 bing-maps


    【解决方案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);
    };
    

    【讨论】:

    • 一旦我添加了 pushpin.SetValue(MapElementExt.TagProperty, MyPinData);如何检索 OnMapTapped 事件中的标记值?或者,如果 UIElement 是更好的选择,您是否有示例链接?谢谢。
    • 尝试类似: var val = (sender as UIElement).GetValue(MapElementExt.TagProperty); if(val != null) var MyPinData = val as MyObjectType;
    • 我一定是遗漏了一些东西,因为它无法正常工作。 mapIcon.SetValue(MapElementExt.TagProperty, location.LocationId);然后在我的地图中点击 var val = (sender as UIElement).GetValue(MapElementExt.TagProperty);但 val 为空。
    • 而不是做(作为 UIElement)尝试(作为 MapElement)
    • 我做了更多的研究,最终按照您的建议为我的图钉创建 UIElement。你愿意看看我的代码以确保它是正确的吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多