C# Xamarin表单中的Make BackButton Override方法后无法退出应用程序
所以之前我想让我的应用程序在按下Pyshical back按钮后返回主页。我已经这样做了,但问题是当我在主页上按下Pyhsical按钮时,它不会去任何地方,而不是关闭应用程序。第二个问题是当页面堆栈为2(MainPage>News>NewsDetail)时,它会直接转到MainPage(DetailNews>MainPage)。我想做的是跳转到上一页(DetailNews>News>MainPage>)。下面是我的完整代码,用于跳过backbuttonC# 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
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。那是虫子吗?或者我需要添加一些代码