Xamarin.Формирует навигацию по маршруту URI 4

#xamarin.forms

#xamarin.forms

Вопрос:

Я пытаюсь начать с предварительных версий Xamarin.Формы 4 и я столкнулся с препятствием на пути с некоторыми включенными функциями навигации. Из документов Microsoft в нем говорится:

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

Я смог настроить свой Shell файл и задать свои Route имена. Следующий код работает должным образом и перенаправляет меня к соответствующему Page :

 private async void NavigateToAbout_Execute()
{
    await (App.Current.MainPage as Shell).GoToAsync("app://Testapp/Test/modal");
}
  

Проблема:

После того, как я успешно перешел к этому Page , кажется, у меня нет возможности перейти от Page . В приведенной выше цитате говорится, что у нас должна быть возможность перемещаться назад (к предыдущему Page ), но я не вижу никакого способа добиться этого. У кого-нибудь уже был опыт работы с этим? Я ценю, что это предварительная версия, поэтому я могу не получить ответа, но любые мысли были бы полезны.

Комментарии:

1. возможно, вы могли бы использовать маршрут для навигации по URL предыдущей страницы, например, вы направляетесь к «app: // test / pages / page1», затем возвращаетесь по маршруту к «app: // test / page / pages».

2. @LeoZhu-MSFT Но это должно быть так же просто, как нажать кнопку возврата программного обеспечения, если она была доступна, но ее нет. Он выглядит как модальная страница, и нет способа вернуться назад, если я не перейду к маршруту предыдущей страницы, на которой я был

3. Да, вы правы. Я проведу некоторое исследование

4. Я тоже пытаюсь разобраться в этом сейчас!

5. Я смог добиться этого с await Shell.Current.Navigation.PushAsync(new DetailPage()); помощью . Я думал, что смысл в том, чтобы использовать GoToAsync, поэтому я не совсем уверен, почему этот метод существует, если вы не можете использовать кнопку «Назад» с маршрутами.

Ответ №1:

У меня был тот же вопрос. Кажется, теперь все в порядке. Эта работа для меня :

 await Shell.Current.Navigation.PopAsync();
  

Вы также можете взглянуть на эту переменную :

 Shell.Current.Navigation.NavigationStack
  

Это список со всеми подробными страницами, которые были помещены выше / на страницы, определенные в командной оболочке.
Я видел, что индекс 0 в этом списке всегда равен нулю. Он представляет последнюю страницу оболочки. «Подробные» страницы, добавленные в оболочку с shell.Current.GotoAsync("detailpage") помощью, идут с индексом от 1 до n в NavigationStack .