我有一个 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)到这个位置。他们也落后了。看起来真的很糟糕。这些对象的渲染真的很差。

    另一种方法是向 MapControlMapElements 属性添加元素。它使这些对象的渲染非常好。
    但是后来我失去了 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/

    10-13 03:10