以编程方式向bing贴图添加数百个图钉冻结了WP7 UI

时间:2011-06-03 09:32:52

标签: silverlight windows-phone-7 bing-maps pushpin

我正在开发一款使用bing贴图显示~600个图钉的WP7应用程序。当我使用map.Children.Add(pushpin)将它们添加到地图时,UI会冻结~200 ms。我已经看到在Silverlight中你可以使用Microsoft.Maps.EntityCollection将地图添加到地图但不幸的是我找不到如何在WP7上使用程序集。有谁知道解决这个问题?

2 个答案:

答案 0 :(得分:10)

也许你正在以错误的方式看问题。 WP7是一款紧凑型(虽然功能强大),擅长向用户展示他们想要快速了解的内容(当应用程序正确编写时)。

用户不可能在小型设备上一次性看到600个图钉,为什么不向他们展示可视区域(或靠近它)的图钉,并在用户平移地图时添加图钉?

或者,您可以通过使用DispatcherTimer一次添加一个(或更多)图钉来“涓涓”喂食图钉,以便用户看到逐渐添加图钉而不会显着影响性能。

另一种可能性(我通常这样做)是将MapItemsControl与DataTemplate集合添加到Pushpin并将集合绑定到您的图钉位置集合。如果绑定是ObservableCollection,如果性能问题,你可以“涓涓”喂它,如上所述。

答案 1 :(得分:1)

在类似于Derek的观点中,我发现你不太可能想要同时在屏幕上放置600个引脚。我猜他们跨越了一个很大的地理区域,用户不太可能一次看到超过一小部分。

如果是这种情况,您可以轻松应用cliprect来剔除您的点,然后将得到的适度列表添加到图层,并且Presto!高性能。

此外,还有一个问题是当用户缩放很长时间时要做什么,将许多引脚放入视图中,它们合并成一个无用但颜色鲜艳的blob。这是一个传统上用四叉树解决的更复杂的问题,我怀疑你刚才说“什么?”但幸运的是谷歌是你的朋友。

哦,为了解决您说明的问题 - 请勿将引脚直接添加到地图中。将它们添加到MapLayer然后添加它。