我将多个MapIcons添加到我的UWP应用程序MapControl中。我想更改基于MapIcon大小的地图缩放级别。
这几乎没问题,但是当我更新标记大小(调用UpdatMarkerSizes())时,并非所有MapIcons都会获得新图像。
我的地图中有大约200个MapIcons,我尝试更新。这是一些性能问题还是我应该如何尝试更新所有MapIcons?
以下是我最初添加MapIcons的方法:
public void AddMapIcons(IReadOnlyCollection<IItem> items)
{
var icon = (CurrentMarkerIconSize == MarkerIconSize.Small) ? _markerSmall : _markerNormal;
foreach (var item in items)
{
var stopIcon = new MapIcon
{
Location = new Geopoint(item.Location),
NormalizedAnchorPoint = new Point(0.5, 0.5),
ZIndex = 5,
CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible,
Image = icon
};
MapControl.MapElements.Add(stopIcon);
}
}
这是我的MapIcon Image更新功能,当map zoomlevel发生变化时会调用它。
private void UpdatMarkerSizes(MarkerIconSize newSize)
{
var newImage = (newSize == StopIconSize.Small) ? _markerSmall : _markerNormal;
foreach (var element in MapControl.MapElements)
{
(element as MapIcon).Image = newImage;
}
}
更新1:
我刚注意到,如果我还更新MapIcon NormalizedAnchorPoint,ZIndex和CollisionBehaviorDesired(再次设置相同的值),这个问题就不那么糟了。以前,当我更新我的标记(UpdatMarkerSizes())时,总会有几个标记没有获得新图像。现在更新后,我很少得到一两个没有得到新图像的标记。
更新的代码:
private void UpdatMarkerSizes(MarkerIconSize newSize)
{
var newImage = (newSize == StopIconSize.Small) ? _markerSmall : _markerNormal;
foreach (var element in MapControl.MapElements)
{
var mapIconElement = element as MapIcon;
if(mapIconElement != null)
{
mapIconElement.Image = newImage;
mapIconElement.NormalizedAnchorPoint = new Point(0.5, 0.5);
mapIconElement.ZIndex = 5;
mapIconElement.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
}
}
}
更新2: 我认为我在更新1中的解决方案现在已经足够好了。我发布了与MapIcons及其图像更新相关的新问题:Dynamically update collection of MapIcons, update process gets out of sync?