2016-08-25 48 views
0

當用戶完成放大/縮小地圖時,我需要執行一些代碼。它的ZoomLevelChanged事件是在用戶放大或縮小時引發的,因此它不是我的解決方案(主要是因爲我想執行的代碼是一個相當昂貴的操作)。有任何想法嗎?UWP:地圖控件ZoomFinished事件

+2

也許在用戶*啓動*縮放時設置一個計時器,並且如果再次調用該事件,則重置該計時器。計時器達到3秒後,您可以認爲它們已完成縮放。 –

+0

@MikeEason不是我能想到的cleaners方式,但是,我認爲它可能工作 – Alex

回答

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 
    } 
} 
+0

我似乎已經這樣做了。你是對的。用戶沒有注意到 – Alex

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(); 
    } 
} 

我知道該事件的文檔不是很大,但在this code sample有一個小的更多信息,你也許能找到更多的git repo

祝你好運!

+0

好主意,讓我試試 – Alex

+0

是的,讓我知道它是否適合你@ j0ey_wh! –