2012-06-11 13 views
6

En una aplicación de Windows Phone 7 Tengo una currentPage, que, en un caso especial no vaya a una nueva página con el NavigationService:Navega a una nueva página sin poner la página actual en la pila posterior?

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

Ahora, cuando el usuario hace clic de nuevo en el NewPage Quiero la aplicación omita la página actual e ir directamente a la página principal de la aplicación.

Intenté utilizar NavigationService.RemoveBackEntry, pero esto elimina la página principal en lugar de la página actual.

¿Cómo navego a una nueva página sin poner la actual en la pila posterior?

Respuesta

11

Al navegar a NewPage.xaml, pase a lo largo de un parámetro para saber cuándo eliminar la página anterior de la backstack.

Usted puede hacer esto como tal:

al navegar de CurrentPage.xaml a NewPage.xaml pase a lo largo de parámetro

 

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

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

En el caso OnNavigatedTo de NewPage .xaml, compruebe si eliminar la página anterior o no.

 

    bool remove = false; 

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

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

De esta manera, se puede decidir sobre la CurrentPage.xaml si quieres eliminarlo de la backstack.

+0

Ahora, ¿cómo hacemos esto en las aplicaciones de la Tienda Windows? ¿Al ver que no parecemos tener 'RemoveBackEntry()'? – GONeale

+0

Todavía no he investigado eso, todo lo que sé es que esto funciona en WP7. Si encuentro una respuesta, la publicaré aquí. – akalucas

0

Parece que su llamada a RemoveBackEntry es prematura (mientras todavía está en CurrentPage.xaml). Es por eso que eliminar MainPage.xaml. Cuando navega a NewPage.xaml, en el evento OnNavigatedTo llame a NavigationService.RemoveBackEntry y eso debería solucionar el problema.

+0

Tengo que llamarlo en CurrentPage, ya que NewPage no sabe que necesita eliminar la pila de respaldo. – Sam

+0

@Sam Vea la respuesta de akalucas. Eso es algo de lo que tenía pensado llamarlo en el evento OnNavigatedTo. También podrá saber si proviene de CurrentPage.xaml o no. – loyalpenguin

1

¿Dónde ha llamado "NavigationService.RemoveBackEntry()"? ¡Creo que tienes que hacerlo en la página nueva, no en la página que deseas omitir!

edit: Para obtener una mejor imagen: tiene mainpage -> 1ra subpágina (se debe omitir en la navegación posterior) -> 2da subpágina que está separada de la 1ra subpágina.

2 ideas: 1) intenta llamar "NavigationService.RemoveBackEntry()" en el OnNavigatedFrom-Evento de la sub página de 1º 2) Llegada la OnNavigatedTo-Evento de la sub-página 1º si el NavigationMode (ver evento args) == Atrás y navegar de nuevo una vez más.

+0

Tengo que llamarlo en CurrentPage, ya que NewPage no sabe que necesita eliminar la pila de respaldo. – Sam

+0

editado mi respuesta –

Cuestiones relacionadas