【问题标题】:UWP: Map control ZoomFinished eventUWP:地图控件 ZoomFinished 事件
【发布时间】:2016-09-08 14:27:55
【问题描述】:

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

【问题讨论】:

  • 可能在用户开始缩放时设置一个计时器,如果再次调用该事件,则重置计时器。在计时器达到 3 秒后,您可以假设他们已经完成缩放。
  • @MikeEason 不是我能想到的清理方式,但我认为它可能有效

标签: c# xaml windows-10 uwp uwp-maps


【解决方案1】:

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

一些代码:

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

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

【讨论】:

  • 我实际上已经这样做了。你是对的。它足够流畅,用户不会注意到
【解决方案2】:

我认为更好的解决方案是监听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();
    }
}

我知道该活动的文档不是很好,但this code sample 有更多信息,您可以在git repo 上找到更多信息。

祝你好运!

【讨论】:

  • 好主意,让我试试
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 2017-05-15
  • 2017-09-10
  • 1970-01-01
  • 2021-10-11
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多