public static void OnNavigationFailed(object sender, NavigationFailedEventArgs e) => NavigationFailed.Invoke(sender, e);
private void WebView_NavigationFailed(object sender, WebViewNavigationFailedEventArgs e) { NavigationFailed?.Invoke(sender, e); }
private static void Frame_NavigationFailed(object sender, NavigationFailedEventArgs e) => NavigationFailed?.Invoke(sender, e);
private bool InnerNavigate(PageStackEntry entry, NavigationMode mode) { try { // Navigating var navigatingFromArgs = new NavigatingCancelEventArgs( mode, entry.NavigationTransitionInfo, entry.Parameter, entry.SourcePageType ); Navigating?.Invoke(this, navigatingFromArgs); if (navigatingFromArgs.Cancel) { // Frame canceled OnNavigationStopped(entry, mode); return(false); } CurrentEntry?.Instance.OnNavigatingFrom(navigatingFromArgs); if (navigatingFromArgs.Cancel) { // Page canceled OnNavigationStopped(entry, mode); return(false); } // Navigate var previousEntry = CurrentEntry; CurrentEntry = entry; if (mode == NavigationMode.New) { // Doing this first allows CurrentEntry to reuse existing page if pooling is enabled ReleasePages(ForwardStack); } if (CurrentEntry.Instance == null) { var page = CreatePageInstanceCached(entry.SourcePageType); if (page == null) { return(false); } page.Frame = this; CurrentEntry.Instance = page; } Content = CurrentEntry.Instance; if (IsNavigationStackEnabled) { switch (mode) { case NavigationMode.New: ForwardStack.Clear(); if (previousEntry != null) { BackStack.Add(previousEntry); } break; case NavigationMode.Back: ForwardStack.Add(previousEntry); BackStack.Remove(CurrentEntry); break; case NavigationMode.Forward: BackStack.Add(previousEntry); ForwardStack.Remove(CurrentEntry); break; case NavigationMode.Refresh: break; } } // Navigated var navigationEvent = new NavigationEventArgs( CurrentEntry.Instance, mode, entry.NavigationTransitionInfo, entry.Parameter, entry.SourcePageType, null ); previousEntry?.Instance.OnNavigatedFrom(navigationEvent); CurrentEntry.Instance.OnNavigatedTo(navigationEvent); Navigated?.Invoke(this, navigationEvent); VisualTreeHelper.CloseAllPopups(); return(true); } catch (Exception exception) { NavigationFailed?.Invoke(this, new NavigationFailedEventArgs(entry.SourcePageType, exception)); if (NavigationFailed == null) { Application.Current.RaiseRecoverableUnhandledException(new InvalidOperationException("Navigation failed", exception)); } return(false); } }
private void OnNavigationFailed(NavigationFailedEventArgs e) { NavigationFailed?.Invoke(this, e); }
void PART_Frame_NavigationFailed(object sender, NavigationFailedEventArgs e) { NavigationFailed?.Invoke(this, e); }
private void RaiseNavigationFailed(INavigationContext navigationContext, Exception error) { NavigationFailed?.Invoke(this, new RegionNavigationFailedEventArgs(navigationContext, error)); }
internal void OnNavigationFailed(WebViewNavigationFailedEventArgs args) { NavigationFailed?.Invoke(this, args); }
private void OnFrameNavigationFailed(object sender, NavigationFailedEventArgs e) => NavigationFailed?.Invoke(sender, e);
/// <summary> /// Invokes the <see cref="NavigationFailed"/> event. /// </summary> /// <param name="sourceType">The source type</param> /// <param name="parameter">The parameter</param> /// <param name="navigationType">The navigation type</param> protected void OnNavigationFailed(Type sourceType, object parameter, NavigationType navigationType) { NavigationFailed?.Invoke(this, new NavigationEventArgs(sourceType, parameter, navigationType)); }
private static Task NavigateInner <T>(T target) where T : INavigationTarget { return(InvokeOnDispatcherAsync(() => { if (_shellResolver == null) { throw new InvalidOperationException("Shell resolver must be set before invoking Navigate method."); } var type = target.GetType(); if (!_navitaionTargetToConfigs.ContainsKey(type)) { NavigationFailed?.Invoke(NavigationFailReason.NotConfigured, target); return; } //1. Find config var configs = _navitaionTargetToConfigs[type]; // If registered more than 1 config, find config which matches target. If no found or only 1 config - use first navigation config. var config = (configs.Count > 1 ? configs.FirstOrDefault(x => x.MatchesTarget(target)) : null) ?? configs.First(); var navMode = config.Mode; if (navMode == NavigationMode.DependsOnTarget) { navMode = config.GetNavigationMode(target); } // Navigation mode after getting from config cannot be NavigationMode.DependsOnTarget if (navMode == NavigationMode.DependsOnTarget) { throw new InvalidOperationException("NavigationConfig.GetNavigationMode returned invalid value: NavigationMode.DependsOnTarget"); } ShellState shellState = null; bool existingShell = false; if (!config.AllowMultiple) { var conflict = _states.FirstOrDefault(x => x.Config == config); if (conflict != null) { //Check if config can handle navigation when already navigated. try { if (config.TryHandleNavigation(target, conflict.Data)) { return; } } catch (NotImplementedException) { } NavigationFailed?.Invoke(NavigationFailReason.NotAllowedToHaveMultiple, target); return; // No futher navigation required. } } //Only for default navigation mode can be searched existing shells. if (navMode == NavigationMode.Default) { //Try find available shell foreach (var state in _states) { // Check if config allows reuse shell if (!state.Config.CanLeave(target)) { continue; } //Only Default and NewWindow can be reused. if (!(state.Mode == NavigationMode.Default || state.Mode == NavigationMode.NewWindow)) { continue; } // On this line shell can be reused. shellState = state; existingShell = true; break; } } // Create shell data from config object shellData; ShellBase parent = null; if (!existingShell) { // Check if need to set parent. if ((navMode == NavigationMode.ChildWindow || navMode == NavigationMode.DialogWindow)) { // Set parent window if shellState.Mode is Dialog or Child if (_states.Any()) //TODO: Improve logic for selecting parent window. { parent = _states[0].Shell; } } // Create new shell if not found available. var shell = _shellResolver.CreateShell(parent); shellState = new ShellState(shell); shellState.ShellClosed += ShellStateOnShellClosed; _states.Add(shellState); shellData = config.GenerateDataForTarget(target, shellState.Shell.Dispatcher); if (shellData == null) { throw new InvalidOperationException("Config returned null from generating object for target."); } // Set data in ShellBase shellState.Load(navMode, config, target, shellData); // Show shell. if (shellState.Mode == NavigationMode.DialogWindow) { shellState.Shell.Dispatcher.InvokeAsync(() => shellState.Shell.ShowDialog()); } else { shellState.Shell.Dispatcher.Invoke(() => { shellState.Shell.Show(); shellState.Shell.Activate(); }); } } else { shellData = config.GenerateDataForTarget(target, shellState.Shell.Dispatcher); if (shellData == null) { throw new InvalidOperationException("Config returned null from generating object for target."); } // Unload current navigatable data. shellState.Unload(); // Set data in ShellBase shellState.Load(navMode, config, target, shellData); } //Navigation to target comleted. shellState.NavigationCompleted(parent); })); }
private bool InnerNavigate(PageStackEntry entry, NavigationMode mode) { try { // Navigating var navigatingFromArgs = new NavigatingCancelEventArgs( mode, entry.NavigationTransitionInfo, entry.Parameter, entry.SourcePageType ); Navigating?.Invoke(this, navigatingFromArgs); CurrentEntry?.Instance.OnNavigatingFrom(navigatingFromArgs); if (navigatingFromArgs.Cancel) { NavigationStopped?.Invoke(this, new NavigationEventArgs( entry.Instance, mode, entry.NavigationTransitionInfo, entry.Parameter, entry.SourcePageType, null )); return(false); } // Navigate var previousEntry = CurrentEntry; CurrentEntry = entry; if (CurrentEntry.Instance == null) { var page = CreatePageInstance(entry.SourcePageType); if (page == null) { return(false); } page.Frame = this; CurrentEntry.Instance = page; } Content = CurrentEntry.Instance; switch (mode) { case NavigationMode.New: ForwardStack.Clear(); if (previousEntry != null) { BackStack.Add(previousEntry); } break; case NavigationMode.Back: ForwardStack.Add(previousEntry); BackStack.Remove(CurrentEntry); break; case NavigationMode.Forward: BackStack.Add(previousEntry); ForwardStack.Remove(CurrentEntry); break; case NavigationMode.Refresh: break; } // Navigated var navigationEvent = new NavigationEventArgs( CurrentEntry.Instance, mode, entry.NavigationTransitionInfo, entry.Parameter, entry.SourcePageType, null ); previousEntry?.Instance.OnNavigatedFrom(navigationEvent); CurrentEntry.Instance.OnNavigatedTo(navigationEvent); Navigated?.Invoke(this, navigationEvent); VisualTreeHelper.CloseAllPopups(); return(true); } catch (Exception exception) { NavigationFailed?.Invoke(this, new NavigationFailedEventArgs(entry.SourcePageType, exception)); return(false); } }