private static ElementHandler CreateHandler(MC.Element parent, MobileBlazorBindingsRenderer renderer) { return(parent switch { MC.ContentPage contentPage => new ContentPageHandler(renderer, contentPage), MC.ContentView contentView => new ContentViewHandler(renderer, contentView), MC.Label label => new LabelHandler(renderer, label), MC.FlyoutPage flyoutPage => new FlyoutPageHandler(renderer, flyoutPage), MC.ScrollView scrollView => new ScrollViewHandler(renderer, scrollView), MC.ShellContent shellContent => new ShellContentHandler(renderer, shellContent), MC.Shell shell => new ShellHandler(renderer, shell), MC.ShellItem shellItem => new ShellItemHandler(renderer, shellItem), MC.ShellSection shellSection => new ShellSectionHandler(renderer, shellSection), MC.TabbedPage tabbedPage => new TabbedPageHandler(renderer, tabbedPage), _ => new ElementHandler(renderer, parent), });
public static ShellNavigationSource CalculateNavigationSource(Shell shell, ShellNavigationState current, NavigationRequest request) { if (request.StackRequest == NavigationRequest.WhatToDoWithTheStack.PushToIt) { return(ShellNavigationSource.Push); } if (current == null) { return(ShellNavigationSource.ShellItemChanged); } var targetUri = ShellUriHandler.ConvertToStandardFormat(shell, request.Request.FullUri); var currentUri = ShellUriHandler.ConvertToStandardFormat(shell, current.FullLocation); var targetPaths = ShellUriHandler.RetrievePaths(targetUri.PathAndQuery); var currentPaths = ShellUriHandler.RetrievePaths(currentUri.PathAndQuery); var targetPathsLength = targetPaths.Length; var currentPathsLength = currentPaths.Length; if (targetPathsLength < 4 || currentPathsLength < 4) { return(ShellNavigationSource.Unknown); } if (targetPaths[1] != currentPaths[1]) { return(ShellNavigationSource.ShellItemChanged); } if (targetPaths[2] != currentPaths[2]) { return(ShellNavigationSource.ShellSectionChanged); } if (targetPaths[3] != currentPaths[3]) { return(ShellNavigationSource.ShellContentChanged); } if (targetPathsLength == currentPathsLength) { return(ShellNavigationSource.Unknown); } if (targetPathsLength < currentPathsLength) { for (var i = 0; i < targetPathsLength; i++) { var targetPath = targetPaths[i]; if (targetPath != currentPaths[i]) { break; } if (i == targetPathsLength - 1) { if (targetPathsLength == 4) { return(ShellNavigationSource.PopToRoot); } return(ShellNavigationSource.Pop); } } if (targetPaths[targetPathsLength - 1] == currentPaths[currentPathsLength - 1]) { return(ShellNavigationSource.Remove); } if (targetPathsLength == 4) { return(ShellNavigationSource.PopToRoot); } return(ShellNavigationSource.Pop); } else if (targetPathsLength > currentPathsLength) { for (var i = 0; i < currentPathsLength; i++) { if (targetPaths[i] != currentPaths[i]) { break; } if (i == targetPathsLength - 1) { return(ShellNavigationSource.Push); } } } if (targetPaths[targetPathsLength - 1] == currentPaths[currentPathsLength - 1]) { return(ShellNavigationSource.Insert); } return(ShellNavigationSource.Push); }
public static List <Page> BuildFlattenedNavigationStack(Shell shell) { var section = shell.CurrentItem.CurrentItem; return(BuildFlattenedNavigationStack(section.Stack, section.Navigation.ModalStack)); }
public ShellNavigationManager(Shell shell) { _shell = shell; }