当用户完成放大/缩小地图时,我需要执行一些代码。它的ZoomLevelChanged
事件在用户放大或缩小时引发,所以它不是我的解决方案(主要是因为我要执行的代码是一个非常昂贵的操作)。有任何想法吗?
问问题
317 次
2 回答
2
如果性能是这里的主要问题,则只有在缩放级别从一个整数更改为另一个整数(1->2、2->3 等)时(跳过昏迷后的部分),您才能“重新渲染”地图元素。据我所知,最大值为ZoomLevel
20(for 2D
)模式。所以我认为它必须足够流畅,让用户不会注意到。
一些代码:
public int ZoomLevel {get; set;} = initialZoomLevel;
private void OnZoomLevelChanged(object sender, EventArgs args)
{
if((int)Map.ZoomLevel!=ZoomLevel)
{
//Rerender stuff
}
}
于 2016-08-26T07:39:20.587 回答
0
我相信更好的解决方案是监听LoadingStatusChanged事件,然后在返回MapLoadingStatus.Loaded时采取行动。
public void LoadingStatusChangedEventHandler(MapControl sender, Object o)
{
if (sender.LoadingStatus == MapLoadingStatus.Loaded)
{
// The map has stopped moving and finished rendering
// If necessary, check that zoom level is different
DoExpensiveOperation();
}
}
我知道那个事件的文档不是很好,但是在这个代码示例中有更多信息,你可以在git repo上找到更多信息。
祝你好运!!
于 2016-09-08T06:27:55.857 回答