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 上有更多信息。
祝你好运!!
我需要在用户完成缩放 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 上有更多信息。
祝你好运!!