2016-02-11 5 views
0

У меня есть следующий поток страниц в моей странице навигации: (1) LoginPage -> (2) ForgotPasswordPage -> (3) PasswordSentPageXamarin Форма RemovePage неожиданного результата

В тот момент я оставляю (2) Я хочу это в NavigationStack, так что кнопка возврата возвращается к (1).

Я пытался в (2):

InsertPageBefore(pwSentPage, this); 
await Navigation.PopAsync().ConfigureAwait(false); 

Это приводит к правой странице, потому что название правильно, но содержание является то, что (1). Если я нажимаю кнопку назад, содержание остается, но название меняется ...

Я также попытался в (3):

protected override void OnAppearing() 
{ 
    base.OnAppearing(); 
    var prevPage = Navigation.NavigationStack.FirstOrDefault (p => p is ForgotPasswordPage); 
    Navigation.RemovePage (prevPage); 
} 

Нажатие кнопки назад здесь показывает мне пустой экран:

Empty screen

Кто-нибудь есть идеи?

ответ

1

Я делаю предположение здесь, но поскольку вы, кажется, используете конструкцию материалов и RemovePage, вы, вероятно, испытываете this bug. Дайте последнюю предварительную проверку 2.1 и посмотрите, разрешит ли она проблему.

+0

Надеюсь, это действительно решение. Однако я не уверен в использовании предварительного выпуска. Я просто подожду немного. – HansElsen

+0

Да, это работало, получив некоторые другие проблемы. Но для этой темы это решение. – HansElsen

0

Не могли бы вы использовать PushModalAsync?

Вы можете поместить это на страницу Login и использовать этот звонок для отображения ForgotPasswordPage.

Когда он будет завершен, он вернется на страницу Login и больше не будет находиться в стеке навигации.

Затем вы можете перейти к PasswordSentPage с страницы Login, если хотите?

После увольнения ForgotPasswordPage он больше не будет находиться в стеке навигации.

Либо использовать messaging или ее TaskCompletionSource конкретно ответить на какой-то тип ответа или действия, чтобы затем вызвать, т.е. навигации к PasswordSentPage при необходимости (если страница не была отменена).

+0

Это приведет к мигающему экрану и нежелательно. – HansElsen

0

Как вы сказали в своем вопросе, вы можете удалить страницу с NavigationStack. Это работает в моем проекте, как он должен:

Firstpage -> PushAsync -> SecondPage -> PushAsync -> ThirdPage

И в ThirdPage:

protected override void OnAppearing() 
{ 
    base.OnAppearing(); 

    var secondPage = Navigation.NavigationStack.FirstOrDefault(p => p is SecondPage); 
    Navigation.RemovePage(secondPage); 
} 

backnavigation, либо с BackButton или в Ccde с PopAsync, показывает FirstPage.

Проверьте код. Выше решение должно работать в вашем случае. Возможно, вы что-то сделали в своем методе OnAppearing. Я создал тестовый проект только с этими 3 страницами, и никаких других вещей в нем не было, и это сработало.

Смежные вопросы