NavigationPage больше не появится

(извините, если вопрос глупый или уже задавался ранее)

Я новичок в .NET MAUI и пытаюсь создать приложение, и у меня есть этот код:

private async void BtnOptionsClicked(object sender, EventArgs e)
{
    OptionsPage optPage = new();
    NavigationPage navPage = new(optPage)
    {
        Title = optPage.Title
    };

    navPage.ToolbarItems.Add(new ToolbarItem("BackButtonPlaceholder", "", async () =>
    {
        System.Diagnostics.Debug.WriteLine("Back button pressed");
        await Navigation.PopAsync();
    }));

    await Navigation.PushAsync(navPage);
}

Я пытаюсь добавить кнопку «Назад» для определенной страницы, а не для главной страницы.

Проблема в том, что NavigationPage появляется в первый раз и работает, но во второй раз он просто не отображается, только OptionsPage.

Кстати, он отлично работает на Android, но не на Windows (я не могу проверить на других платформах).

Я попытался использовать RemovePage вместо PopAsync и попытался добавить ToolbarItem в класс OptionsPage, ничего из того, что я пробовал, не работает...

Если у вас уже есть NavigationPage, немного странно помещать в стек еще один NavigationPage

Jason 13.02.2023 01:25

Нажать optPage. Не заключайте его во вторую страницу NavigationPage.

ToolmakerSteve 13.02.2023 02:31

Дело в том, что у меня нет другой NavigationPage, я хочу, чтобы только OptionsPage имела NavigationPage, но не страницу, с которой она будет вызываться.

Game_Menu 13.02.2023 15:12
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
0
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы смешиваете Shell и NavigationPage, по умолчанию проект .NET MAUI создается с Shell.

  • NavigationPage является иерархическим (вы помещаете/выталкиваете страницы в стек), он проще в использовании и более гибкий, но вы должны управлять всем самостоятельно (например, меню).
  • Shell - это навигация на основе URI (работает так же, как страницы веб-сайта с такими URL-адресами, как «/users/1/profile»), она поставляется с предварительно разработанным меню (вкладки и всплывающее окно) и позволяет перейти к абсолютному URL-адресу (который не легко с NavigationPage). Он «заменяет» NavigationPage, поскольку он охватывает множество вариантов использования и удаляет много стандартного кода, связанного с навигацией (поэтому он используется по умолчанию).

Поскольку Shell основан на NavigationPage, использование методов NavigationPage с Shell не приведет к ошибкам, вы не должны их смешивать (они не предназначены для использования вместе).

Если вы хотите использовать NavigationPage, вы должны изменить ./App.xaml.cs:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        // Replace :
        // MainPage = new AppShell();
        // By this :
        MainPage = new NavigationPage(new MainPage());
    }
}

Теперь вы можете использовать Navigation.PushAsync(page);, объект page должен наследовать ContentPage, а не другой NavigationPage.

Если вы хотите сохранить Shell, прочитайте это и используйте await Shell.Current.GoToAsync("../../route"); для перехода между страницами.

Другие вопросы по теме