2010-10-22 6 views
5

Je crée une application Windows Phone 7 qui a une sémantique de connexion/déconnexion (authentification à une application web). Lorsque l'utilisateur se déconnecte, je retourne à l'écran de connexion et j'oublie l'authentification de la session. Dans ce cas, j'aimerais également effacer l'historique de navigation afin de ne pas pouvoir revenir à une page qui s'attend à ce qu'ils soient déjà authentifiés.Comment effacer l'historique de navigation dans Silverlight/Windows Phone 7?

Je ne vois pas comment le faire avec NavigationService et je me demande s'il y a un moyen de le faire.

Répondre

6

Il y a quelques choses à regarder ici. Tout d'abord, je recommande de se familiariser avec les conseils offerts ici.

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

Redirecting an initial navigation - Peter Torr's Blog (vers le bas au moment désolé)

Si vous êtes en mesure de travailler dans cette ligne directrice qui est le meilleur chemin. Il existe des conseils spécifiques pour traiter les écrans de connexion.

Si vous êtes obligé d'offrir une fonctionnalité de bouton d'accueil. Faites attention à la façon dont vous appliquez cela, car les certificateurs repoussent les applications pour se comporter de façon inattendue en ce qui concerne la navigation. Je pense que si cette fonction est derrière un bouton d'accueil, vous devriez être ok dans le département de surprise. Comment cela se passe au fil du temps avec la certification, nous verrons. On peut soutenir qu'un scénario de «déconnexion» s'applique également.

Voici trois approches de Richard Woo, Maarten Struys, Sam Jarawan.

+0

Merci Mick. J'ai hâte de lire ce post quand il reviendra. J'ai du mal à comprendre comment le scénario très courant de la connexion et de la déconnexion, en particulier lors de l'authentification contre des ressources distantes, correspond à ce que j'ai lu sur les règles de navigation Windows Phone. – dkackman

+0

Il y avait deux messages en fait, j'ai édité ci-dessus - lire dans l'ordre présenté. Son blog est sauvegardé. –

+1

On dirait que ce conseil a fait son chemin dans la documentation récemment aussi. http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx –

0

Je crains que vous ne puissiez pas effacer la pile de pages et, de plus, votre application ne passera pas la certification. More info

3

Ce code fonctionne bien (il doit être dans la page), ne l'ont pas essayé de l'obtenir passé encore la certification, mais le code ne fonctionne:

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

Cela ne semble être d'accord avec l'documentation, qui dit qu'une exception sera levée quand il n'y a plus d'éléments, donc j'ai logged a bug sur la voix de l'utilisateur pour cela, donc cela pourrait changer dans le futur.

0

Une façon plus simple de simplement effacer le backstack est de faire ce qui suit

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

Sachez cependant que si vous faites cela en cas onLoaded il se déclenche chaque fois que la page est naviguées et en cliquant à nouveau se fermez l'application! Il est important de noter que si vous utilisez un webcontrol ou le système de publicité NAX, le back-office est consommé par la page ainsi que par le contrôle web, donc l'application existera plutôt que de retourner à une page.

** Mise à jour Aussi juste trouvé une version main encore plus près du centre de dev MS

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

une ligne simple.Belle

0

Vous devez créer un événement "Loaded" pour votre page

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