2015-06-16 2 views
1

Я новичок в разработке приложений для Windows, и я исхожу из андроидного фона. Поэтому у меня есть это приложение, где я показываю список некоторых мест, и при нажатии на любое место пользователю должен быть показан маршрут от его/ее текущего местоположения до места расположения. Я могу добиться этого. Однако при возврате и нажатии на другое место он показывает как предыдущий маршрут до предыдущего местоположения, так и текущий путь.Как убить страницу в разработке Windows Phone 8

Код страницы карты является

namespace MapApper 
{ 
    /// <summary> 
    /// An empty page that can be used on its own or navigated to within a Frame. 
    /// </summary> 
    public sealed partial class MainPage : Page 
    { 
     private double latitude, longitude; 
     public MainPage() 
     { 
      this.InitializeComponent(); 

      this.NavigationCacheMode = NavigationCacheMode.Required; 
     } 
     private async void GetRouteAndDirections() 
     { 
      Geolocator geolocator = new Geolocator(); 
      Geoposition geoposition = null; 

      geoposition = await geolocator.GetGeopositionAsync(); 

      // Start at Microsoft in Redmond, Washington. 
      BasicGeoposition startLocation = new BasicGeoposition(); 
      startLocation.Latitude = geoposition.Coordinate.Latitude; 
      startLocation.Longitude = geoposition.Coordinate.Longitude; 
      Geopoint startPoint = new Geopoint(startLocation); 

      // End at the city of Seattle, Washington. 
      BasicGeoposition endLocation = new BasicGeoposition(); 
      endLocation.Latitude = latitude; 
      endLocation.Longitude = longitude; 
      Geopoint endPoint = new Geopoint(endLocation); 

      // Get the route between the points. 
      MapRouteFinderResult routeResult = 
       await MapRouteFinder.GetDrivingRouteAsync(
       startPoint, 
       endPoint, 
       MapRouteOptimization.Time, 
       MapRouteRestrictions.None); 

      textblock.Text = routeResult.Status.ToString()+latitude+longitude; 
      if (routeResult.Status == MapRouteFinderStatus.Success) 
      { 
       // Use the route to initialize a MapRouteView. 
       MapRouteView viewOfRoute = new MapRouteView(routeResult.Route); 
       viewOfRoute.RouteColor = Colors.Yellow; 
       viewOfRoute.OutlineColor = Colors.Black; 

       // Add the new MapRouteView to the Routes collection 
       // of the MapControl. 
       mapper.Routes.Add(viewOfRoute); 

       // Fit the MapControl to the route. 
       await mapper.TrySetViewBoundsAsync(
        routeResult.Route.BoundingBox, 
        null, 
        Windows.UI.Xaml.Controls.Maps.MapAnimationKind.None); 
      } 
     } 




     /// <summary> 
     /// Invoked when this page is about to be displayed in a Frame. 
     /// </summary> 
     /// <param name="e">Event data that describes how this page was reached. 
     /// This parameter is typically used to configure the page.</param> 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      // TODO: Prepare page for display here. 
      textblock.Text = "EnteringOn"; 
      show s = (show)e.Parameter; 
      latitude = s.latitude; 
      longitude = s.longitude; 
      GetRouteAndDirections(); 
      Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
      // TODO: If your application contains multiple pages, ensure that you are 
      // handling the hardware Back button by registering for the 
      // Windows.Phone.UI.Input.HardwareButtons.BackPressed event. 
      // If you are using the NavigationHelper provided by some templates, 
      // this event is handled for you. 
     } 
     private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
     { 
      e.Handled = true; 
      if (Frame.CanGoBack) 
       Frame.GoBack(); 
     } 

    } 
} 

Это, как я получаю путь для предыдущего запроса и текущего запроса вместе.

enter image description here

Я ищу что-то вроде Activity.finish() в андроид, я знаю, как эта технология очень разные.

+0

Вы можете попробовать очистить предыдущий маршрут с чем-то вроде 'mapper.Routes.Clear()' – Umair

ответ

1

Помимо правильного использования резервного стека, как Джеральд упомянул, вы также хотели бы передать latitude и longitude функции GetRouteAndDirections в качестве параметров и поэтому ваш код будет выглядеть следующим образом:

namespace MapApper 
{ 
    public sealed partial class MainPage : Page 
    { 
     // private double latitude, longitude; // comment this 
     public MainPage() 
     { 
      this.InitializeComponent(); 

      this.NavigationCacheMode = NavigationCacheMode.Required; 
     } 
     private async void GetRouteAndDirections(double latitude, double longitude) 
     { 

      //... your code 

      endLocation.Latitude = latitude; 
      endLocation.Longitude = longitude; 

      //... your code 

     } 

     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      //... your code 

      show s = (show)e.Parameter; 
      // latitude = s.latitude; // comment this 
      // longitude = s.longitude; // comment this 
      GetRouteAndDirections((double)s.latitude, (double)s.longitude); // you might want to cast the lat and lon as double 

      //... your code 

     } 

     //... your code 
    } 
} 

Попробуйте это и посмотрите, не устранит ли это проблему.

+0

Я попытался реализации, однако я все еще в состоянии увидеть предыдущий маршрут вместе с текущим , Это похоже на то, что карта не очищает данные. – Pranjal

+0

Пробовал ли вы очистить предыдущий маршрут, используя 'mapper.Routes.Clear()' или что-то подобное? – Umair

+0

mapper.Routes.Clear() сделал трюк, спасибо :) – Pranjal

1

Возможно, вы захотите посмотреть на back stack. Это стек страниц, на которые приложение будет перемещаться, если вы нажмете кнопку «Назад».

Вы можете получить к нему доступ через объект RootFrame. Это свойство BackStack.

Вы можете стереть последнее подобное;

RootFrame.RemoveBackEntry(); 

или удалите их все (кроме последних), пройдя через него.

for (int i = 0; i < historyListBox.SelectedIndex; i++) 
{ 
    RootFrame.RemoveBackEntry(); 
} 

С помощью этого вы можете манипулировать задним стеклом в соответствии с вашими потребностями и перейти к правой странице с помощью кнопки «Назад».

0

Если вы хотите просто удалить предыдущий маршрут, нарисованный на карте, попробуйте использовать метод Clear() или Remove(). Непроверенные код ниже:

mapper.Routes.Clear(); 
mapper.Routes.Add(viewOfRoute); 
Смежные вопросы