Neulich wollte ich in einer App die beiden neuen Tasks BingMapsTask und BingMapsDirectionsTask einbauen.
Der BingMapsTask sollte in meiner Anwendung so funktionieren, dass er einen von der App übergebenen Ort auf der Karte zentriert. Der Task hat dafür eine Eigenschaft Center. Aber was passiert, wenn man dem Task über diese Eigenschaft eine GeoCoordinate mit gibt? Nichts! Die Karte bleibt genau in der Ansicht, in der sie zuletzt war. Zunächst dachte ich, dass es an einer Kombination der Eigenschaften des BingMapsTask lag (man kann auch noch einen Suchbegriff und die Zoomstufe setzen). Aber egal, was ich dem Task übergeben habe, der übergebene Ort wurde nicht zentriert.
Wie zum Glück hier beschrieben liegt das offenbar daran, dass der BingMapsTask die per Center übergebenen Koordinaten intern in einen String umwandelt und dabei die lokalen Einstellungen für das Dezimalstellen-Trennungszeichen ignoriert. Eine deutsche 41,1234 wird deshalb im BingMapsTask zu einer 411234. Zum Glück ist in dem Blog auch ein Workaround beschrieben:
Man setzt die CurrentCulture vor Aufruf des Tasks auf en-US.
Dann werden die Fließkommazahlen richtig gewandelt und nach Beendigung des Tasks setzt man die CurrentCulture wieder zurück. Das Ganze sieht dann zum Beispiel so aus:
string realCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; try { var task = new Microsoft.Phone.Tasks.BingMapsTask(); task.Center = new System.Device.Location.GeoCoordinate(lat, lon); task.ZoomLevel = 18; Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); task.Show(); } catch { } finally { Thread.CurrentThread.CurrentCulture = new CultureInfo(realCulture); }
Der selbe Workaraund ist übrigens auch beim BingMapsDirectionsTask nötig, um Start und End zu übergeben.
Keine Kommentare
Vielen Dank, das hat geholfen!