【发布时间】:2014-09-19 19:52:20
【问题描述】:
我很难将图钉添加到以我喜欢的方式工作的地图中。
首先,我尝试添加 MapItemsControl 并绑定到它。
<map:MapItemsControl ItemsSource="{Binding Path=Locations}">
<map:MapItemsControl.ItemTemplate>
<DataTemplate>
<controls:NumberedCircle Number="{Binding Path=Number}" map:MapControl.Location="{Binding Path=Point}"/>
</DataTemplate>
</map:MapItemsControl.ItemTemplate>
</map:MapItemsControl>
这可行,但是当您平移地图时看起来绝对糟糕;地图平移和图钉图标赶上它们应该在的位置之间存在非常明显的延迟。如果我来回平移地图的速度足够快,我就可以从街道的一侧跳到另一侧。列表中只有一项会发生这种情况,因此地图不会被淹没。
这是一个效果视频:http://youtu.be/9FIvkOf71bg
接下来我尝试将 MapIcons 添加到 MapElements 集合中。这是在行为中完成的,因为我使用的是 MVVM,但总体思路是
var mapIcon = new MapIcon() { Location = pushpinDrawBehavior.Location};
mapControl.MapElements.Add(mapIcon);
这很好用。我平移地图,无论我平移多快,MapIcon 都会准确地停留在它应该在的位置。完全没有迟钝的行为。但是 - 当您放大和缩小时,MapIcon 会出现和消失,如文档中所述:
不保证会显示 MapIcon。它可能隐藏时 遮挡地图上的其他元素或标签。
我很沮丧,因为我有两种方法可以将图钉添加到地图中,而且由于不同的原因,它们都会造成糟糕的用户体验。所以,问题是:
1) 我错过了什么吗?有没有办法让 XAML 元素不落后于 pan?有没有办法让 MapIcons 始终可见?
2) 有没有办法创建一个行为类似于 MapIcon 的自定义类?它派生自 MapElement,但我看不到图钉的实际渲染是如何完成的,或者图像、标题等的布局是如何定义的。如果我可以创建自己的 MapIcon,我可能会禁用隐藏行为。
编辑:在诺基亚 925 上运行应用程序,效果不太明显(上面的视频来自 521)。保持 XAML 覆盖与地图同步似乎是处理器密集型的,并且在较小的硬件上会更糟。
【问题讨论】:
-
嗨,保罗,从那以后你有什么新东西要添加的吗?注意到同样的效果。