如何在单页上显示主详细信息页面和后退按钮

时间:2016-04-21 07:28:55

标签: c# xamarin.forms

我有应用程序在哪里有我的主要详情页面:img 我会为所有页面设置静态(左侧菜单栏设置,登录)静态。由于我正在使用主详细信息页面,因此我使用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
                };
            });

2 个答案:

答案 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();
            }
        }