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?
Clearing backstack in NavigationService
Also, if you want to remove only the previous page after checking its URI:
Asked Answered
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();
}
RemoveBackEntry sometimes throws NullReferenceException. Some logic inside navigation system is broken so on FAS it sometiems adds phantom journalentries with PageInstance == null. –
Zia
If I wanted to remove only a single page, since my Navigation is A then B, and I want to remove A, I would just call
this.NavigationService.RemoveBackEntry();
in the OnNavigatedTo event? I would use a querystring from A to B just to be sure that the navigation to B was from A. –
Liederman 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);
}
It does. I'm Using it in my Windows Phone 8.1 Silverlight App. –
Canarese
© 2022 - 2024 — McMap. All rights reserved.