【问题标题】:Button x:Name="btnBack" not navigating to previous page按钮 x:Name="btnBack" 未导航到上一页
【发布时间】:2018-02-20 09:37:37
【问题描述】:

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

<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 上的按钮并打开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());
            }
       }

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案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找到官方指南。

    【讨论】:

    • 遇到同样的问题会给我错误 System.NullReferenceException: Object reference not set to an instance of an object
    • 调试您的代码并共享堆栈跟踪。异常在哪里抛出?很可能它与导航无关。
    • 我建议检查您的问题,因为原始问题与当前问题不同。您的代码示例不完整,说明具有误导性。
    【解决方案2】:

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

    【讨论】:

    • 我在单击 btnBack_Clicked 和 btnZ_Clicked 2-3 次后尝试了 PopAsync(),然后 Z.xaml 页面将变为空白,不再显示返回和确认按钮。给我错误 System.NullReferenceException: Object reference not set to an instance of an object
    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2022-01-10
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多