/// <summary>
        /// Default shell FORWARD handler overrides standard FORWARD behavior that navigates to next page
        /// in the stack. Views or Viewodels can override this behavior by handling the ForwardRequested event
        /// and setting the Handled property of the ForwardRequestedEventArgs to true.
        /// </summary>
        private void RaiseForwardRequested()
        {
            var args = new HandledEventArgs();

            foreach (var frame in WindowWrapper.Current().NavigationServices.Select(x => x.FrameFacade))
            {
                frame.RaiseForwardRequested(args);
                if (args.Handled)
                {
                    return;
                }
            }

            // default to first window
            NavigationService.GoForward();
        }
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member

        /// <summary>
        /// This handles all the prelimimary stuff unique to Activated before calling OnStartAsync()
        /// This is private because it is a specialized prelude to OnStartAsync().
        /// OnStartAsync will not be called if state restore is determined.
        /// </summary>
        /// <param name="e">The event args.</param>
        private async Task InternalActivatedAsync(IActivatedEventArgs e)
        {
            if (e.Kind == ActivationKind.ShareTarget)
            {
                var shareArgs = e as ShareTargetActivatedEventArgs;

                if (e.PreviousExecutionState == ApplicationExecutionState.Running ||
                    e.PreviousExecutionState == ApplicationExecutionState.Suspended)
                {
                    var frame = new Frame();
                    frame.Tag = FRAME_IN_SHARE_CONTEXT;
                    Window.Current.Content = frame;

                    var view = WindowWrapper.Current(Window.Current);
                    var navigationService = new NavigationService(frame);
                    view.NavigationServices.Add(navigationService);

                    if (frame.Content == null)
                    {
                        navigationService.Navigate(ShareTargetPage, shareArgs.ShareOperation);
                    }
                }
                else
                {
                    InitRootFrameAndNavigation();
                    Window.Current.Content = RootFrame;

                    await WindowWrapper.Current(NavigationService).Dispatcher.DispatchAsync(() =>
                    {
                        NavigationService.Navigate(ShareTargetPage, shareArgs.ShareOperation);
                    });
                }

                Window.Current.Activate();
                return;
            }

            // sometimes activate requires a frame to be built, such as after a launch using a toast notification
            if (Window.Current.Content == null)
            {
                InitRootFrameAndNavigation();

                await OnInitializeAsync(e);

                _statusBarService = Injector.Get <IStatusBarService>();

                if (UseAppShell &&
                    e.PreviousExecutionState != ApplicationExecutionState.Running &&
                    e.PreviousExecutionState != ApplicationExecutionState.Suspended &&
                    e.Kind != ActivationKind.ShareTarget)
                {
                    Window.Current.Content = new AppShell(
                        RootFrame,
                        CreateNavigationMenuItems(),
                        CreateBottomDockedNavigationMenuItems());
                }
            }

            // onstart is shared with activate and launch
            await OnStartAsync(StartKind.Activate, e);

            // if the user didn't already set custom content use rootframe
            if (Window.Current.Content == null)
            {
                Window.Current.Content = RootFrame;
            }

            UpdateTheme();

            // ensure active (this will hide any custom splashscreen)
            Window.Current.Activate();
        }