【问题标题】:Xamarin.Forms: Navigating Away from Master Detail Page causes every page afterwards to have two backbuttons in headerXamarin.Forms:离开主详细信息页面会导致之后的每个页面在标题中都有两个后退按钮
【发布时间】:2020-08-02 16:58:44
【问题描述】:

我正在从一个主详细信息页面(有一个侧边菜单)导航到一个在标题中有一个后退按钮但没有其他类似的普通页面:

        btn_anzeigeerstellen_pickcate.Clicked += delegate
        {
            Navigation.PushAsync(new Screen_SwipeView());
        };

我以前用过空白页,它们总是有一个后退按钮。但是现在,由于我要离开主详情页面,结果是这样的:

虽然下方的后退按钮只是向后导航,但上方的后退按钮会再次导航到应用程序的开头(这是没有意义的) 所以上面的后退按钮需要去掉。

另外,我注意到通过从左端向右滑动,它会从主详细信息页面中调出菜单,这还不错,但它表明应用程序仍然“认为”它在主页面中详情页。

我怎样才能改变这种行为?

谢谢!

主详细信息页面:

public partial class Screen_MainMenu : MasterDetailPage
    {
        public Screen_MainMenu()
        {
            InitializeComponent();
            //MasterPage.ListView.ItemSelected += ListView_ItemSelected;
        }

        private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var item = e.SelectedItem as Screen_MainMenuMasterMenuItem;
            if (item == null)
                return;

            var page = (Page)Activator.CreateInstance(item.TargetType);
            page.Title = item.Title;

            Detail = new NavigationPage(page);
            IsPresented = false;

            MasterPage.ListView.SelectedItem = null;
        }
    }


 public partial class Screen_MainMenuMaster : ContentPage
    {
        public ListView ListView;

        public Screen_MainMenuMaster()
        {
            InitializeComponent();

            BindingContext = new Screen_MainMenuMasterViewModel();
            ListView = MenuItemsListView;
        }

        class Screen_MainMenuMasterViewModel : INotifyPropertyChanged
        {
            public ObservableCollection<Screen_MainMenuMasterMenuItem> MenuItems { get; set; }

            public Screen_MainMenuMasterViewModel()
            {
                MenuItems = new ObservableCollection<Screen_MainMenuMasterMenuItem>(new[]
                {
                    new Screen_MainMenuMasterMenuItem { Id = 0, Title = "Mein Profil" },
                    new Screen_MainMenuMasterMenuItem { Id = 1, Title = "Meine Anzeigen" },
                    new Screen_MainMenuMasterMenuItem { Id = 2, Title = "Merkliste" },
                    new Screen_MainMenuMasterMenuItem { Id = 3, Title = "Website" },
                    new Screen_MainMenuMasterMenuItem { Id = 4, Title = "Kontakt" },
                    new Screen_MainMenuMasterMenuItem { Id = 1, Title = "Hilfe" },
                    new Screen_MainMenuMasterMenuItem { Id = 2, Title = "Einstellungen" },
                    new Screen_MainMenuMasterMenuItem { Id = 3, Title = "Missbrauch melden" },
                    new Screen_MainMenuMasterMenuItem { Id = 4, Title = "Log Out" },

                });
            }

            #region INotifyPropertyChanged Implementation
            public event PropertyChangedEventHandler PropertyChanged;
            void OnPropertyChanged([CallerMemberName] string propertyName = "")
            {
                if (PropertyChanged == null)
                    return;

                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
            #endregion
        }

【问题讨论】:

  • 能否附上如何在 App.cs 中实例化主详情页面的代码?
  • @ColeXia-MSFT 查看我的更新。这够了吗? :)

标签: xamarin.forms


【解决方案1】:

从我可以看到的代码和我假设您已经完成的代码中,我认为您将 MasterDetailPage 本身添加到 NavigationPage 中,反过来,当详细信息页面位于导航页面中时,会导致双导航栏。

您的主从页面导航应该如下所示:

App.Xaml.cs

MainPage= new Screen_MainMenu();

我假设你有类似的东西:

MainPage= new NavigationPage(new Screen_MainMenu());

祝你好运

如果您有任何问题,请随时回复。

【讨论】:

  • 嘿嘿,所以我尝试启动这样的页面 await Navigation.PushAsync(new NavigationPage(new Screen_SwipeView()));这导致另一个页面打开,现在有 3 个标题(之前有 2 个)并添加了另一个。所以这有点需要修复,但我需要确保它实际上离开主详细信息页面并呈现一个新的导航页面并关闭它周围的主详细信息页面......
  • 另外,当我这样做时: Application.Current.MainPage = new NavigationPage(new Screen_SwipeView());那么下一个屏幕上只有一个栏但也没有更多的后退按钮...... ^^
  • 我认为您没有正确使用MasterDetailPage,这实际上导致了这些问题,您可以尝试检查此stackoverflow.com/questions/49169049/… 并重新创建您的MaterDetailPage吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多