2014-02-11 36 views
4

任何人都可以在Windows應用商店(C#/ XAML)上成功添加某種谷歌地圖視圖Windows 8.1?由於Bing Maps許可證的成本(因爲Bing地圖有本地Metro控件,這會更容易),因此我們選擇了Google地圖。Windows應用商店上的谷歌地圖(C#/ XAML) - 無縮放

我能夠關注this article並在WebView控件中包含一個html頁面。我也可以用我的C#類與它通信(使用ScriptNotifywindow.external.notify)。

但是,捏縮放手勢不被識別,因爲它不會在地圖上執行縮放。

這裏是我的WebView

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid x:Name="GridOut"> 
     <WebView x:Name="MapWebView" ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.VerticalScrollMode="Disabled" ManipulationMode="All" /> 
    </Grid> 
</Grid> 

而且隨着地圖的html頁面:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head> 
<meta charset="utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=10" /> <!-- To get double tap for zoom to work--> 
    <!– Google Maps API reference –> 
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=visualization"></script> 
    <script type="text/javascript" src="libs/richmarker.js"></script> 
    <script type="text/javascript" src="CountryInfo.js"></script> 
    <script type="text/javascript" src="libs/infobox.js"></script> 
    <!– map references –> 
    <link href="map.css" rel="stylesheet" /> 
<script src="map.js"></script> 
</head> 
<body> 
    <div id="mapdisplay" /> 
</body> 
</html> 

不過,如果我打開IE裏面(甚至使用IE瀏覽器在Visual Studio中我的HTML頁面模擬器)捏到縮放手勢在那裏,工作順利,所以我認爲問題是與WebView。另一方面,如果我瀏覽我的WebView到這個URL,捏變焦將工作,所以這真的讓我感到困惑。

我也曾嘗試:

1)使用一個額外的HTML頁面內一個IFrame,但它並沒有改變任何東西。

2)實現變焦我自己的JavaScript手勢識別器(帶MSGestureChange),但結果卻是遠遠可取的,我覺得我「重塑一個非常糟糕的車輪」 ......

有沒有人跨越COM這個問題?

在此先感謝。

+1

一兩件事要嘗試可能會增加[-MS-內容縮放(http://msdn.microsoft.com/en-us/library/windows/apps/hh441251.aspx)到地圖腳本。 –

+0

你好,Nate。感謝您的建議。我申請了文檔正文和實際的Map div的CSS,但我沒有注意到任何區別。沒有縮放。我不明白爲什麼在普通瀏覽器上捏縮放工作正常。 – bpires

+0

不幸的是,你可能不走運。 WebView不是一個完整的瀏覽器,它只在文檔模式下呈現頁面。正如你所建議的,你可能需要做的是添加一個手勢識別器。但是,您可以在C#/ Xaml中執行此操作,然後使用ScriptNotify指示JavaScript執行什麼操作。這也會使調試/測試更容易一些。 –

回答

1

所以這是我的工作是什麼,但它遠離實際的谷歌地圖縮放,這是因爲:

1)谷歌地圖捏到變焦不是簡單地跳轉到一個縮放級別,它可以縮放磁貼以獲得流暢的動畫/過渡。 2)根據用戶在屏幕上應用縮放的位置,它也傾向於平移到該區域(假設您以LatLong 0,0爲中心,縮放級別爲2.如果用戶捏住北極時,縮放級別應該增加,並且隨着放大而逐漸向北極平移)。

var mGesture = new MSGesture(); 

function InitGestureHandler() 
{ 

    var mapDiv = document.getElementById('mapdisplay'); 
    mGesture.target = mapDiv; 

    // You need to first register to MSPointerDown to be able to 
    // have access to more complex Gesture events 
    mapDiv.addEventListener("pointerdown", pointerdown, false); 
    mapDiv.addEventListener("MSGestureChange", manipulateElement, false); 

} 

function manipulateElement(e) { 

    //Can also add timestamps here to allow the code to run only every so milliseconds 
    if (e.scale > 1.05) { 
     map.setZoom(currentZoomLevel + 1); 
    } 
    else if (e.scale < 0.95) { 
     map.setZoom(currentZoomLevel - 1); 
    } 
} 
+1

谷歌意識到Windows 8.1的捏縮放問題,但他們還沒有解決它。您可能想要解決以下問題:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5747 – mdiener

+0

謝謝。剛剛做到了。 – bpires

相關問題