C# Windows Phone 8.1运行时中多个子项的MapControl性能糟糕
我有一个C# Windows Phone 8.1运行时中多个子项的MapControl性能糟糕,c#,windows-runtime,maps,winrt-xaml,windows-phone-8.1,C#,Windows Runtime,Maps,Winrt Xaml,Windows Phone 8.1,我有一个MapControl,应该用多个对象(500+)填充。这些对象表示某种POI。当用户点击对象(图钉)时,我会显示有关POI的更多信息。因此,我需要: 能够处理大量子对象的MapControl 截获子对象的事件 为了实现第二个目标,我决定定义自己的图钉模板: <maps:MapControl x:Name="Map"> <maps:MapItemsControl ItemsSource="{Binding Pushpins}"> <ma
MapControl
,应该用多个对象(500+)填充。这些对象表示某种POI。当用户点击对象(图钉)时,我会显示有关POI的更多信息。因此,我需要:
MapControl
<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>
这很有效,除了。。这种方法的视觉效果非常好。每次我移动地图,每个图钉都会闪烁很多。我不知道,他们好像不受这个职位的约束。他们也落后了。看起来真的很糟糕。这些对象的渲染非常糟糕
另一种方法是向MapControl
的MapElements
属性添加元素。这使得这些对象的渲染非常好。
但是我失去了绑定的能力,我必须解决这个问题——我不太喜欢这个。还有第二个问题——据我所知,渲染MapElements
集合中的对象是一种最有效的方法。因此,这并不能保证它会成功。这对我来说不是一个选项,因为在未来我计划添加集群功能,所以我需要完全控制地图上渲染的内容和不渲染的内容
你知道为什么这些MapControl
的元素会闪烁这么多吗?我能做些什么来防止它?提前感谢您的提示或回答。试试以下方法:
Tag="{Binding index_of_collection}"
这是:
OnPushpinTappedAsync()
int index = (int)(sender as Image).Tag; //index_of_collection
我面临着完全相同的问题。在我看来,地图控制完全被破坏了。除了性能之外,还有很多bug:( 您无法真正解决问题,但可以创建一个“oldschool”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…我也面临这个问题,但我发现这是有用的
希望Microsoft更新Windows 10的地图控件。您是否尝试过在图像控件上设置CacheMode=“BitmapCache”?我刚刚尝试过,没有什么不同。您能解释一下您的答案有什么帮助吗?