按钮x:名称=" btnBack"没有导航到上一页

时间:2018-02-20 09:37:38

标签: xamarin xamarin.forms

我正在为IOS和Android开发Xamarin Forms应用程序。我有3个xamarin表单页面的列表说X.xaml, Y.xaml, Z.xaml。页面X.xaml, Y.xaml有1并单击该按钮,它会打开下一个Xamarin表单。最后Z.xaml有2个按钮btnBack& btnConfirm

<Button x:Name="btnBack"></Button>
<Button x:Name="btnConfirm"></Button>

当我点击后退按钮时,我想将其导航到我的上一页,但我不想像导航后退按钮或硬件后退按钮单击那样。 为此,我尝试了这段代码,但这不起作用。

Z.xaml.cs

public partial class Z : ContentPage
        {
            public Z()
            {
                InitializeComponent();                   
                btnBack.Clicked += btnBack_Clicked;
            }   
            private void btnBack_Clicked(object sender, EventArgs e)
            {
                var existingPages = Navigation.NavigationStack.ToList();
                foreach (var page in existingPages)
                {
                    if(page == this)
                        Navigation.RemovePage(page);
                }
            }
        }   

在此代码中,当我点击Back Button时,一旦我点击Y.xaml上的按钮并打开Y.xaml页面,它就会导航到prevoius页面Z.xaml让我一片空白。

Y.xaml.cs

 public partial class Y: ContentPage
      {
        public Y()
         {
            InitializeComponent();
            btnZ.Clicked += btnZ_Clicked;
          } 
         void btnZ_Clicked(object sender, System.EventArgs e)
           {            
              Navigation.PushAsync(new Z());
            }
       }

2 个答案:

答案 0 :(得分:1)

@Kowalski有正确的答案,但它不完整。

你必须await Navigation.PopAsync()否则你可能会搞乱导航堆栈。所以总是等着它。例如:

async void btnBack_Clicked(object sender, EventArgs e)
{
    await Navigation.PopAsync();
}

除此之外,请注意Xamarin.Forms中存在与导航相关的错误,以下是您可能感兴趣的错误: https://bugzilla.xamarin.com/show_bug.cgi?id=59172

P.S。:在这里,您可以找到关于Popping Pages from the Navigation Stack的官方指南。

答案 1 :(得分:0)

你应该调用Navigation.PopAsync()返回