C# Xamarin表单中的Make BackButton Override方法后无法退出应用程序

C# Xamarin表单中的Make BackButton Override方法后无法退出应用程序,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,所以之前我想让我的应用程序在按下Pyshical back按钮后返回主页。我已经这样做了,但问题是当我在主页上按下Pyhsical按钮时,它不会去任何地方,而不是关闭应用程序。第二个问题是当页面堆栈为2(MainPage>News>NewsDetail)时,它会直接转到MainPage(DetailNews>MainPage)。我想做的是跳转到上一页(DetailNews>News>MainPage>)。下面是我的完整代码,用于跳过backbutton public bool DoBack

所以之前我想让我的应用程序在按下Pyshical back按钮后返回主页。我已经这样做了,但问题是当我在主页上按下Pyhsical按钮时,它不会去任何地方,而不是关闭应用程序。第二个问题是当页面堆栈为2(MainPage>News>NewsDetail)时,它会直接转到MainPage(DetailNews>MainPage)。我想做的是跳转到上一页(DetailNews>News>MainPage>)。下面是我的完整代码,用于跳过backbutton

  public bool DoBack
        {
            get
            {
                MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage;

                if (mainPage != null)
                {
                    bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented;

                    // we are on a top level page and the Master menu is NOT showing
                    if (!canDoBack)
                    {
                        // don't exit the app just show Dashboard
                        //mainPage.IsPresented = true;

                        Type page = typeof(DrawerPage);

                        mainPage.Detail = new NavigationPage((Page)Activator.CreateInstance(page));
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                return true;
            }
        }

我应该在这里添加或更改什么代码才能做到这一点,有什么建议吗?

第一个问题: 你的逻辑是错误的。如果你想留在主页上,你需要返回true

  public bool DoBack
        {
            get
            {
                MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage;

                if (mainPage != null)
                {
                    bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented;

                    // we are on a top level page and the Master menu is NOT showing
                    if (!canDoBack)
                    {
                        // don't exit the app just show Dashboard
                        //mainPage.IsPresented = true;

                        Type page = typeof(DrawerPage);

                        mainPage.Detail = new NavigationPage((Page)Activator.CreateInstance(page));
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                return true;
            }
        }
第二个问题:
它直接从DetailsNews转到MainPage的原因是您调用PoptRoot而不是Pop。阅读此内容。

Im已在每个详细信息页面中找到解决方案Im覆盖OnBackButton按下

  protected override bool OnBackButtonPressed()
            {
                Device.BeginInvokeOnMainThread(async () => {
                    Application.Current.MainPage = new DrawerPage();
                });

                return true;
            }

是的,它可以关闭,但是当im在新闻页面时它会关闭所有内容,它会转到主页,然后立即关闭,看起来主页条件总是空的,所以它不会返回其他条件。所以else条件已经正确了,它必须返回true,现在的问题是为什么它永远不会返回else条件,即使我在mainpage中,我也无法回答这个问题。这只是一小段代码。我建议您使用调试器并检查App.Current.MainPage和其他部分中的内容。我已经调试了我的代码,并且我发现我的问题,NavigationStack.Count始终为1。这是问题,当我在MainPage中导航时,NavigationStack为1,当我导航到新闻时,NavigationStack为1 t0o。是什么让这一切发生的?为什么NavigationStack总是1有任何建议吗?您可能不会在新闻页上调用push(DetailNews),而是将DetailNews分配给MainPage.Detail.yes,我使用此Detail=new NavigationPage((page)Activator.CreateInstance(page)),我尝试了Detail.Navigation.PushAsync((Page)Activator.CreateInstance(Page));工作正常,但只工作一次,navigationstack.count为2,但当我再次尝试导航到新闻时,navigationstack计数仅为1。那是虫子吗?或者我需要添加一些代码