Как перейти из режима вкладок и обратно с помощью .Net Maui Shell

В .Net MAUI я пытаюсь перейти из представления входа в главное представление, которое является частью макета с вкладками. После этого я хочу перейти на совершенно отдельную страницу, которая не является частью макета с вкладками, поэтому я не хочу видеть никаких вкладок вверху или внизу.

В AppShell у меня есть маршруты и вкладки, добавленные следующим образом:

Из LoginViewModel я перемещаюсь следующим образом: await Shell.Current.GoToAsync($"//{HomeViewModel}")

что работает так, как и ожидалось, я перехожу в HomeView и вижу вкладки вверху и внизу. Из этого представления я хочу перейти к ExampleView следующим образом: await Shell.Current.GoToAsync($"{ExampleViewModel}")

Но я все еще вижу вкладки внизу, я считаю, что это правильное поведение, поскольку у каждой вкладки есть свой стек, а мое новое представление было перемещено в верхнюю часть HomeView.

Однако это не то, чего я хочу добиться, я хочу перейти на совершенно новую страницу без видимых вкладок и иметь возможность вернуться назад, если это возможно.

Я пробовал использовать разные типы маршрутов:

await Shell.Current.GoToAsync($"//{ExampleViewModel}")await Shell.Current.GoToAsync($"///{ExampleViewModel}")

так как я думал, что мне нужно сбросить текущий стек, чтобы удалить вкладки, но сделав это, я получаю исключение: Глобальные маршруты в настоящее время не могут быть единственной страницей в стеке Я чувствую, что упускаю что-то очевидное, но не могу найти никакой информации об этом виде навигации. Возможно ли это вообще с использованием навигации Shell по умолчанию, и если да, возможно ли вернуться к определенному представлению в макете с вкладками, из которого я перешел?

 public AppShell()
 {
     InitializeComponent();
     Routing.RegisterRoute(nameof(LoginViewModel), typeof(LoginView));
     Routing.RegisterRoute(nameof(HomeViewModel), typeof(HomeView));
     Routing.RegisterRoute(nameof(ExampleViewModel), typeof(ExampleView));

     var initialPage = new ShellContent
     {
         ContentTemplate = new DataTemplate(typeof(LoginView))
     };

     Items.Add(initialPage);

     SetupTabs();
 }

 private void SetupTabs()
 {
     var mainTab = new Tab
     {
         Title = "Main",
         Route = nameof(HomeViewModel)
     };

     mainTab.Items.Add(new ShellContent
     {
         Title = "Page1",
         ContentTemplate = new DataTemplate(typeof(HomeView))
     });

     mainTab.Items.Add(new ShellContent
     {
         Title = "Page2",
         ContentTemplate = new DataTemplate(typeof(PlaceholderView))
     });

     var secondTab = new Tab
     {
         Title = "Second",
     };

    secondTab.Items.Add(new ShellContent
     {
         Title = "Page1",
         ContentTemplate = new DataTemplate(typeof(PlaceholderView))
     });

     Items.Add(mainTab);
     Items.Add(secondTab);
 }
Никанор
Вопрос задан25 июля 2024 г.

1 Ответ

2
Олимпиада
Ответ получен3 сентября 2024 г.

Ваш ответ

Загрузить файл.