Xamarin Forms取消当前后显示新页面

时间:2019-04-01 16:18:28

标签: c# xamarin.forms

嗨Xamarin开发人员,

因此,在一种情况下,用户将从页面A转到页面B。

await Navigation.PushModalAsync(new PageB());

然后从页面B到页面C,在这种情况下,应先关闭页面B,然后再显示页面C

await Navigation.PopModalAsync();
await Navigation.PushModalAsync(new PageC());

但是有了此代码,就不会显示C页,您能帮我做错什么吗?

2 个答案:

答案 0 :(得分:2)

  

但是有了此代码,就不会显示C页,您能帮我做错什么吗?

解决方案:

您应按照以下步骤从 B页中删除<div class="wrapper"> <img id="slide" src="https://via.placeholder.com/536x96" /> </div>

await

如果使用Navigation.PopModalAsync(); Navigation.PushModalAsync(new PageC()); 异步方法,则在执行async/await方法时,接口将返回到A页。此时,PopModalAsync方法的执行将不会响应,因为这是B页中的方法,并且B接口是Pop,在发布Pop之后,此方法将不起作用。因此,异步处理方法不能在B页中使用。

注意:如果 Xamarin Forms(XF)具有像 Android 这样的PushModalAsync(new PageC())方法,则该页面可以在以下情况下被释放页面跳转。尽管会对视觉效果产生一些影响,但 XF 中的这种处理只能做到这一点。

答案 1 :(得分:1)

在被调用页面中执行PopModalAsync()时,它将在调用页面中触发OnAppearing()事件处理程序。要从模式页面返回后要执行某些操作,您需要执行以下操作:

    public class PageA {
        private bool returnedFromModal = false;

        private async void ShowB_Clicked (object sender, EventArgs e) {
           returnedFromModal = false;
           await Navigation.PushModalAsync(new NavigationPage(new PageB()));
           returnedFromModal = true;
        }

        protected override async void OnAppearing() {
           base.OnAppearing();
           if (returnedFromModal) {
               returnedFromModal = false;
               await Navigation.PushAsync(new PageC());
           }
        }
    }