简体   繁体   中英

detect navigationwindow go back event

how to determine when navigationwindow back button is pressed and trap that event to something extra. I am thinking of managing the page state.

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
    }
}

Ps 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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM