我有一个 MapControl
应该填充多个对象(500+)。这些对象代表某种兴趣点。当用户点击对象(图钉)时,我会显示有关 POI 的更多信息。所以,我需要:
MapControl
Tapped
事件为了实现第二个目标,我决定定义自己的图钉模板:
<maps:MapControl x:Name="Map">
<maps:MapItemsControl ItemsSource="{Binding Pushpins}">
<maps:MapItemsControl.ItemTemplate>
<DataTemplate>
<Image Width="40"
Height="40"
Source="{ ... }"
Tapped="OnPushpinTappedAsync"
maps:MapControl.Location="{Binding Location}"
maps:MapControl.NormalizedAnchorPoint="{Binding AnchorPoint}" />
</DataTemplate>
</maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>
</maps:MapControl>
这很好用,除了这样一个事实......这种方法的视觉效果非常糟糕。每当我移动 map 时,每个
Pushpin
都会闪烁很多。就好像他们没有,我不知道,绑定(bind)到这个位置。他们也落后了。看起来真的很糟糕。这些对象的渲染真的很差。另一种方法是向
MapControl
的 MapElements
属性添加元素。它使这些对象的渲染非常好。但是后来我失去了
binding
能力并且必须解决它 - 我不是那个的忠实粉丝。还有第二个问题 - 从我读过的内容来看,渲染 MapElements
集合的对象是一种尽力而为的交易。所以不保证一定会成功。这对我来说不是一个选择,因为将来我计划添加聚类功能,因此我需要完全控制 map 上呈现的内容和不呈现的内容。您知道为什么这些
MapControl
的元素会如此闪烁吗?我能做些什么来防止它?提前感谢您的任何提示或答案。 最佳答案
我正面临着完全相同的问题。在我看来,MapControl 已完全损坏。除了性能之外还有很多错误:(
您无法真正解决问题,但您可以创建一个“老派”WP8.0 Silverlight 应用程序并使用以下内容:
<Page xmlns:map="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps">
<map:Map Grid.Row="1" x:Name="myMap">
<tool:MapExtensions.Children>
<tool:MapItemsControl>
... and so on ...
这表现很好,但当然你必须改变一切,从 Win(P)RT 到 Silverlight......
关于c# - 在 Windows Phone 8.1 Runtime 中具有多个子项的 MapControl 的糟糕性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25424677/