В .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);
}