#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
.