protected virtual void OnProcessRequest(NavigationRequest request, Action <bool> requestCallback) { Guard.ArgumentNotNull(request, "request"); Guard.ArgumentNotNull(requestCallback, "requestCallback"); // if there is a pending request if (ActiveNavigationRequest != null) { NavigationService.CancelNavigation(ActiveNavigationRequest); ActiveNavigationRequest = null; } // we say we are navigating var _cancelEventArgs = new NavigatingCancelEventArgs(this, request); OnNavigating(_cancelEventArgs); // if not cancelled, then we go to our base class to check against the ISupportNavigation if (!_cancelEventArgs.Cancel) { NavigationService.ProcessNavigationLifecycle(request, this.CurrentNavigationLifecycleSupporter, this.CurrentNavigationViewLifecycleSupporter, (b) => { if (b) { ActiveNavigationRequest = request; } else { requestCallback(b); } }, () => { TransitionToNavigationState(Controls.NavigationState.Navigating); requestCallback(true); }); } else { requestCallback(false); } }