how to determine when navigationwindow back button is pressed and trap that event to something extra. I am thinking of managing the page state.
Asked
Active
Viewed 3,206 times
2 Answers
4
Add a handler to either NavigationWindow.Navigating
or NavigationService.Navigating
. In your handler:
void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (e.NavigationMode == NavigationMode.Back) {
e.Cancel = true;
// TODO: whatever state management you're going to do
}
}
P.s. You will need to register the navigation service. In my code it didn't work on the page constructor because the navigation service was still null. So I added Loaded="page_Loaded" to the XAML page tag and assigned it there:
bool _navigationServiceAssigned = false;
private void page_Loaded(object sender, RoutedEventArgs e)
{
if (_navigationServiceAssigned == false)
{
NavigationService.Navigating += NavigationService_Navigating;
_navigationServiceAssigned = true;
}
}
The NavigatingCancelEventArgs
contains all of the information about the navigation request you'll need to manage page state.

Jeff
- 8,020
- 34
- 99
- 157

sellmeadog
- 7,437
- 1
- 31
- 45
1
The NavigationService
provides a number of events you can subscribe to, if you want to control the navigation process:
- Navigating, when the frame is about to navigate. Set Cancel to true to stop.
- Navigated, when navigation has finished but before it is rendered
- NavigationFailed, when something goes wrong
- NavigationProgress, when chunks of a remote navigation call are being downloaded.
- NavigationStopped, when the StopLoading method is called or a new Navigate request is made during downloading
- LoadCompleted, when the page has been rendered

Wolfgang Ziegler
- 1,675
- 11
- 23
-
1how to detect the back button event? – TrustyCoder Jul 25 '12 at 16:39
-
The event arguments have a `NavigationMode` property you can use. – Wolfgang Ziegler Jul 25 '12 at 16:43