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