private async void OnStopsClicked(BusStop[] stops, BasicGeoposition location) { BasicGeoposition newCenter = location; newCenter.Latitude = location.Latitude + (MainMap.TopLeft.Latitude - MainMap.BottomRight.Latitude) / 2 - 50 * MainMap.LatitudePerPixel; double halfLatSpan = (MainMap.TopLeft.Latitude - MainMap.BottomRight.Latitude) / 2.5; double halfLonSpan = (MainMap.BottomRight.Longitude - MainMap.TopLeft.Longitude) / 2.5; if (halfLatSpan > 0 && halfLonSpan > 0) { await MainMap.MapControl.TrySetViewBoundsAsync(new GeoboundingBox(new BasicGeoposition() { Latitude = newCenter.Latitude + halfLatSpan, Longitude = newCenter.Longitude - halfLonSpan }, new BasicGeoposition() { Latitude = newCenter.Latitude - halfLatSpan, Longitude = newCenter.Longitude + halfLonSpan }), null, MapAnimationKind.Linear); } MapControl.SetLocation(StopArrivalBoxGrid, new Geopoint(location)); StopArrivalBox.SetStops(stops); VisualStateManager.GoToState(this, "ArrivalBoxShown", true); if (!SettingsManager.GetSetting("ShowStopPageTipShown", true, false) && (new Random()).NextDouble() < 0.05) { SettingsManager.SetSetting("ShowStopPageTipShown", true, true); await Task.Delay(1000); await StopArrivalBox.ShowHelpTip(); } }
protected override void OnSaveState(Dictionary <string, object> state) { state.Add("Lat", MainMap.Center.Latitude); state.Add("Lon", MainMap.Center.Longitude); state.Add("Zoom", MainMap.ZoomLevel); if (ArrivalBoxVisualStates?.CurrentState?.Name == "ArrivalBoxShown") { state.Add("Stops", StopArrivalBox.GetStops().Select(bs => bs.ID).ToArray()); var boxPosition = MapControl.GetLocation(StopArrivalBoxGrid); state.Add("StopsLat", boxPosition.Position.Latitude); state.Add("StopsLon", boxPosition.Position.Longitude); } }