UWP:地图控件 ZoomFinished 事件

UWP: Map control ZoomFinished event

我需要在用户完成缩放 in/out 地图时执行一些代码。它的 ZoomLevelChanged 事件在用户放大或缩小时引发,因此这对我来说不是解决方案(主要是因为我要执行的代码是一项非常昂贵的操作)。有什么想法吗?

如果性能是这里的主要问题,您可以 "rerender" 只有当缩放级别从一个整数变为另一个整数(1->2、2->3 等等)时,您才能 "rerender" 您的地图元素 (跳过昏迷后的部分)。据我所知,ZoomLevel 的最大值是 20(对于 2D)模式。所以我认为它必须足够流畅,用户不会注意到。

一些代码:

public int ZoomLevel {get; set;} = initialZoomLevel;

private void OnZoomLevelChanged(object sender, EventArgs args)
{
    if((int)Map.ZoomLevel!=ZoomLevel)
    {
        //Rerender stuff
    }
}

我认为更好的解决办法是听 LoadingStatusChanged event, then take action when you get back 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();
    }
}

我知道该事件的文档不是很好,但 this code sample, and you may be able to find even more on the git repo 上有更多信息。

祝你好运!!