2012-07-12 36 views
1

我有一個地圖上我動態顯示圖釘,並希望與圖釘互動而不與地圖交互(所以我不能通過設置IsEnabled="False"來禁用地圖,我也不能使用地圖的圖像)。禁用地圖移動從筆觸

我試過這裏描述的技術:Handling tap on Pushpin in a fixed Map,這對於縮放和平移非常適用。

擴展這個想法我已經成立了事件處理所有這似乎符合事件:

Hold="map_Hold" 
    MapPan="map_MapPan" 
    MapZoom="Map_MapZoom" 
    ManipulationStarted="map_ManipulationStarted" 
    ManipulationDelta="map_ManipulationDelta" 
    ManipulationCompleted="map_ManipulationCompleted" 
    MouseLeftButtonDown="map_MouseLeftButtonDown" 
    MouseLeftButtonUp="map_MouseLeftButtonUp" 
    TargetViewChanged="map_TargetViewChanged" 
    ViewChangeStart="map_ViewChangeStart" 
    ViewChangeEnd="map_ViewChangeEnd" 
    ViewChangeOnFrame="map_ViewChangeOnFrame" 

(在事件處理程序,我只是設置e.Handled = true;

然而,你仍然可以出鍋通過在其上進行輕彈動作(例如,如何輕彈到照片應用中的下一張圖像)。

有沒有辦法完全禁用地圖平移? 或者如果IsEnabled="False"有沒有辦法與這些引腳進行交互?

回答

1

這篇文章是一段時間以前,所以你可能現在已經解決了這個問題。但是我今天遇到了這個問題,這就是我的解決方案。 (它不是很優雅,但似乎工作正常)。

對於我拖放圖釘後放開圖釘時發生此問題 - 即使我在拖動圖釘時禁用了map_pan事件,地圖仍然會從放置時創建的「拂動」手勢移開拖放後拖動推針。

首先,創建範圍的DespatchTimer一個頁面和一個int,這將是我們的計數器:

DispatcherTimer dti = new DispatcherTimer(); 
int counter =0; 

接下來,在圖釘的MouseLeftButton了事件,停用了您的地圖,開始發貨定時器的間隔1.還爲它創建Tick事件處理程序。

private void pushpin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
Map.IsEnabled = false; 
dti.Interval = new TimeSpan(0, 0, 0, 0, 1); // 1 Seconds 
     dti.Start(); 
     dti.Tick += new EventHandler(dti_Tick); 
//other code logic 
} 

接下來,創建dti_Tick事件。在tick事件中,當它是tick事件的第二次迭代時停止發送計時器並重新啓用地圖。重置計數器以備將來使用。

void dti_Tick(object sender, EventArgs e) 
    { 
     counter++; 
     if (counter>= 1) 
     { 
      dti.Stop(); 
      Map.IsEnabled = true; 
      counter= 0; 
     } 
    } 

這個過程將停止你的拖放圖釘邏輯後發生的任何'輕彈'。顯然這個代碼可以進一步優化,但希望它對你有一些幫助。