2012-06-11 5 views
6

In Phone 7 applicazione Windows Ho una CurrentPage, che, in un evento speciale fa accedere a una nuova pagina utilizzando il NavigationService:Passare a una nuova pagina senza inserire la pagina corrente nello stack posteriore?

NavigationService.Navigate(new Uri("/NewPage.xaml", UriKind.Relative)); 

Ora, quando l'utente fa clic di nuovo sul NewPage voglio l'applicazione per salta la pagina corrente e vai direttamente alla pagina principale dell'app.

Ho provato a utilizzare NavigationService.RemoveBackEntry, ma questo rimuove la pagina principale anziché la pagina corrente.

Come si passa a una nuova pagina senza mettere la corrente sullo stack posteriore?

risposta

11

Durante la navigazione su NewPage.xaml passa un parametro in modo da sapere quando rimuovere la pagina precedente dal backstack.

Si può fare questo in quanto tale:

Durante la navigazione da CurrentPage.xaml a NewPage.xaml passaggio lungo parametro

 

    bool remove = true; 
    String removeParam = remove ? bool.TrueString : bool.FalseString; 

    NavigationService.Navigate(new Uri("/NewPage.xaml?removePrevious="+removeParam , UriKind.Relative)); 

In caso OnNavigatedTo di NewPage .xaml, controllare se rimuovere la pagina precedente o meno.

 

    bool remove = false; 

    if (NavigationContext.QueryString.ContainsKey("removePrevious")) 
    { 
     remove = ((string)NavigationContext.QueryString["removePrevious"]).Equals(bool.TrueString); 
     NavigationContext.QueryString.Remove("removePrevious"); 
    } 

    if(remove) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 

In questo modo, si può decidere sul CurrentPage.xaml se si desidera rimuoverla dal backstack.

+0

Ora come lo facciamo nelle app di Windows Store? Vedendo che non sembra avere 'RemoveBackEntry()'? – GONeale

+0

Non l'ho ancora esaminato, tutto quello che so è che funziona su WP7. Se mi capita di trovare una risposta, la posterò qui. – akalucas

0

Sembra come se chiamassi RemoveBackEntry in anticipo (mentre sei ancora su CurrentPage.xaml). Ecco perché rimuove MainPage.xaml. Quando navighi su NewPage.xaml, nella chiamata all'evento OnNavigatedTo NavigationService.RemoveBackEntry dovresti risolvere il problema.

+0

Devo chiamarlo su CurrentPage, poiché NewPage non sa che è necessario rimuovere lo stack posteriore. – Sam

+0

@Sam Dai un'occhiata alla risposta di akalucas. Questo è un po 'quello che avevo in mente di chiamarlo nell'evento OnNavigatedTo. Sarai anche in grado di dire se vieni o meno da CurrentPage.xaml o meno. – loyalpenguin

1

Dove hai chiamato "NavigationService.RemoveBackEntry()"? Penso che devi farlo nella nuova pagina, non nella pagina che vuoi saltare!

modifica: modifica: Per ottenere un'immagine migliore: si sta visualizzando mainpage -> prima pagina secondaria (dovrebbe essere saltata nella navigazione indietro) -> seconda pagina secondaria che è indipendente dalla prima pagina secondaria.

2 idee: 1) Prova a chiamare "NavigationService.RemoveBackEntry()" nel OnNavigatedFrom-evento del sub pagina 1rst 2) Verificare nella OnNavigatedTo-evento della sottopagina 1rst se il NavigationMode (vedi evento args) == Indietro e torna indietro ancora una volta.

+0

Devo chiamarlo su CurrentPage, poiché la NewPage non sa che è necessario rimuovere lo stack posteriore. – Sam

+0

modificato la mia risposta –