2010-10-22 13 views
5

Estoy haciendo una aplicación para Windows Phone 7 que tenga semántica de inicio de sesión/cierre de sesión (se autentique en una aplicación web). Cuando el usuario cierra la sesión, vuelvo a la pantalla de inicio de sesión y olvido la autenticación de la sesión.¿Cómo elimino el historial de navegación en Silverlight/Windows Phone 7?

Al hacerlo, también me gustaría borrar el historial de navegación para que no pueda regresar a una página que espera que ya esté autenticado.

No puedo ver cómo hacerlo con NavigationService y me pregunto si hay una manera de hacerlo.

Respuesta

6

Hay algunas cosas que ver aquí. Primero, recomiendo familiarizarse con la orientación que se ofrece aquí.

Introducing the concept of “Places” - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog (abajo en el momento siento)

Si usted es capaz de trabajar dentro de esta orientación que es el mejor camino. Hay consejos específicos para tratar con pantallas de inicio de sesión.

Si se ve obligado a ofrecer una función de botón de inicio. Tenga cuidado al aplicar esto, ya que los certificadores están rechazando las aplicaciones por comportamientos inesperados con respecto a la navegación. Siento que si esta función está detrás de un botón de inicio, debería estar bien en el departamento sorpresa. Cómo se mantendrá esto en el tiempo con la certificación que veremos. Podría decirse que un escenario de "cierre de sesión" se aplica por igual.

Aquí hay tres enfoques de Richard Woo, Maarten Struys, Sam Jarawan.

+0

Gracias Mick. Espero leer esa publicación cuando vuelva a aparecer. Tengo problemas para ver cómo el típico escenario de inicio de sesión y cierre de sesión, especialmente cuando se autentica con recursos remotos, se ajusta a lo que he estado leyendo sobre las reglas de navegación de Windows Phone. – dkackman

+0

En realidad, había dos publicaciones, las he editado anteriormente, leídas en orden presentado. Su blog está de vuelta por cierto. –

+1

Parece que este consejo también se incluyó en la documentación recientemente. http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx –

0

Me temo que no puede borrar la pila de páginas y, lo que es más, su aplicación no pasará la certificación. More info

3

Este código funciona bien (que tiene que estar en su página), no han intentado conseguirlo pasado la certificación todavía, pero el código no trabajo:

while (true) 
{ 
    if (this.RemoveBackEntry() == null) 
    { 
     break; 
    } 
    } 

esto no parece diferir con el documentation, que dice que se generará una excepción cuando no haya más elementos, así que tengo logged a bug en la voz del usuario para esto, por lo que puede cambiar en el futuro.

0

Una forma más sencilla simplemente borrar la backstack es hacer lo siguiente

while (NavigationService.CanGoBack) 
{ 
    NavigationService.RemoveBackEntry(); 
} 

Ten en cuenta que si lo hace en el caso onLoaded se disparará cada vez que la página se navega a y haciendo clic de nuevo se cierra la aplicación!

Nota importante, que si utiliza un webcontrol o el sistema de anuncios NAX, la tecla de retroceso se consume tanto en la página como en el control web, por lo que existirá la aplicación en lugar de volver a una página.

** Actualización también acaba de encontrar una versión aún más cerca del lado del centro dev MS

while (NavigationService.RemoveBackEntry() != null); 

Una simple línea.Niza

0

Debe crear evento "cargado" de su página

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    }