Clearing backstack in NavigationService
-
07-03-2021 - |
Frage
I am navigating through different pages within my application. After I login, I come to home page from where the navigation starts. During navigation, when I come to homepage, I want to go to the login page by pressing BackKey but I can only navigate to previously navigated page. I could have overriden the BackKeyPress event to navigate to the Login Page but in LoginPage I should again override the Backkeypress otherwise there appears to be cycle between loginpage and homepage on backkey press. Is there anyway to clear the navigation history?
Lösung
You can use NavigationService.RemoveBackEntry: http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.removebackentry%28v=VS.92%29.aspx
For instance, to remove all entries from the stack:
while (this.NavigationService.BackStack.Any())
{
this.NavigationService.RemoveBackEntry();
}
Also, if you want to remove only the previous page after checking its URI:
var previousPage = this.NavigationService.BackStack.FirstOrDefault();
if (previousPage != null && previousPage.Source.ToString().StartsWith("/MainPage.xaml"))
{
this.NavigationService.RemoveBackEntry();
}
Andere Tipps
While I know the original question was for 7, in Windows Phone 8.1 the NavigationService no longer exists.
Here is the Windows Phone 8.1 code
var previousPage = this.Frame.BackStack.FirstOrDefault();
if (previousPage != null && previousPage.SourcePageType == typeof(MainPage))
{
this.Frame.BackStack.RemoveAt(this.Frame.BackStackDepth - 1);
}