我有应用程序在哪里有我的主要详情页面: 我会为所有页面设置静态(左侧菜单栏设置,登录)静态。由于我正在使用主详细信息页面,因此我使用messagingcenter在给定here:
的页面之间导航MessagingCenter.Send(new RedirectClass.OpenDetails(), RedirectClass.OpenDetails.Key);
但是现在因为我使用了主要细节,所以我无法使用后退按钮导航回来。后退按钮将退出应用程序。假设用户位于“页面A”,当用户点击设置菜单时,用户应该被重定向到设置页面(设置页面都将离开菜单),因此点击设置页面上的后退按钮会将用户重定向到“页面A” 。哪个没有发生。有帮助吗?
MessagingCenter.Subscribe<RedirectClass.OpenDetails>(this, RedirectClass.OpenDetails.Key, (sender) =>
{
Detail = new NavigationPage(new Details())
{
BarBackgroundColor = Color.FromRgb(172, 183, 193),
BarTextColor = Color.Black,
BackgroundColor = Color.White
};
});
答案 0 :(得分:0)
而不是覆盖MessagingCenter回调中的详细信息页面
Detail = new NavigationPage(new Details())
您应该使用详细信息页面的导航属性来推送堆栈顶部的新页面
Detail.Navigation.PushAsync(new Details())
确保您的初始详细信息页面包含在导航页
中答案 1 :(得分:0)
我遇到了同样的问题,Detail.Navigation.PushAsync(itemSelected)
使汉堡包菜单消失我决定将自己的堆栈数据类型用于“母版详细信息”页面。保持跟踪和编码有点棘手,但工作正常。
在应用程序加载时使用当前的“详细信息”页面将其初始化,并针对所选的每个项目将其推入堆栈顶部。
public partial class MyMasterDetailPage: MasterDetailPage
{
private Stack navigationStack = new Stack();
public MyMasterDetailPage()
{
InitializeComponent();
navigationStack.Push(Detail);
try
{
masterPage.listView.ItemSelected += OnItemSelected;
}
catch (Exception exc)
{
System.Diagnostics.Debug.WriteLine(exc.Message);
}
}
在
后的同一页代码中覆盖OnBackButtonPressed()
protected override bool OnBackButtonPressed()
{
try
{
var lastPage = navigationStack.Pop();
if (lastPage.Equals(Detail))
lastPage = navigationStack.Pop();
Detail = (Page)lastPage;
IsPresented = false;
// to avoid app close when complete pop and new page is push on top of it
if (navigationStack.Count == 0)
navigationStack.Push(Detail);
return true;
}
catch (Exception)
{
return base.OnBackButtonPressed();
}
}