Xamarin.forms 表单:离开母版详细信息页面导航会导致之后的每个页面在页眉中都有两个BackButton

Xamarin.forms 表单:离开母版详细信息页面导航会导致之后的每个页面在页眉中都有两个BackButton,xamarin.forms,Xamarin.forms,我正在从一个母版详细信息页面(有一个侧菜单)导航到一个普通页面,该页面的标题中有一个后退按钮,但没有其他类似的内容: btn_anzeigeerstellen_pickcate.Clicked += delegate { Navigation.PushAsync(new Screen_SwipeView()); }; 我以前用过空页,它们总是有一个后退按钮。但现在,由于我要离开母版详细信息页面,结果是: 下backbutt

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

        btn_anzeigeerstellen_pickcate.Clicked += delegate
        {
            Navigation.PushAsync(new Screen_SwipeView());
        };
我以前用过空页,它们总是有一个后退按钮。但现在,由于我要离开母版详细信息页面,结果是:

下backbutton只是向后导航,而上back button则再次导航到应用程序的最开始(这是毫无意义的) 因此,需要移除上背部按钮

此外,我注意到,通过从屏幕左端向右滑动,它将从主控详细信息页面打开菜单,这也不错,但它显示应用程序仍然“认为”它在主控详细信息页面内

我怎样才能改变这种行为

谢谢大家!

母版详细信息页:

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
        }
公共部分类屏幕\u主菜单:MasterDetailPage
{
公共屏幕_主菜单()
{
初始化组件();
//MasterPage.ListView.ItemSelected+=ListView\u ItemSelected;
}
private void ListView_ItemSelected(对象发送者,SelectedItemChangedEventArgs e)
{
var item=e.选择editem作为屏幕_MainMenuMasterMenuItem;
如果(项==null)
回来
var page=(page)Activator.CreateInstance(item.TargetType);
page.Title=项目.Title;
详细信息=新导航页面(第页);
IsPresented=假;
MasterPage.ListView.SelectedItem=null;
}
}
公共部分类屏幕\u MainMenuMaster:ContentPage
{
公共列表视图列表视图;
公共屏幕_MainMenuMaster()
{
初始化组件();
BindingContext=new Screen_MainMenuMasterViewModel();
ListView=MenuItemsListView;
}
类屏幕\u MainMenuMasterViewModel:INotifyPropertyChanged
{
公共ObservableCollection菜单项{get;set;}
公共屏幕\u MainMenuMasterViewModel()
{
MenuItems=新的ObservableCollection(新[]
{
新屏幕\u MainMenuMasterMenuItem{Id=0,Title=“Mein Profil”},
新屏幕\u MainMenuMasterMenuItem{Id=1,Title=“Meine Anzegen”},
新屏幕_mainmenuestermenuitem{Id=2,Title=“Merkliste”},
新屏幕\u MainMenuMasterMenuItem{Id=3,Title=“网站”},
新屏幕\u MainMenuMasterMenuItem{Id=4,Title=“Kontakt”},
新屏幕\u MainMenuMasterMenuItem{Id=1,Title=“Hilfe”},
新屏幕\u MainMenuMasterMenuItem{Id=2,Title=“Einstellungen”},
新屏幕\u MainMenuMasterMenuItem{Id=3,Title=“Missbrauch melden”},
新屏幕\u MainMenuMasterMenuItem{Id=4,Title=“注销”},
});
}
#区域INotifyPropertyChanged实现
公共事件属性更改事件处理程序属性更改;
void OnPropertyChanged([CallerMemberName]字符串propertyName=”“)
{
if(PropertyChanged==null)
回来
调用(这是新的PropertyChangedEventArgs(propertyName));
}
#端区
}

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

您的母版详细信息页面导航应该如下所示:

App.Xaml.cs

MainPage= new Screen_MainMenu();
我假设你有这样的东西:

MainPage= new NavigationPage(new Screen_MainMenu());
祝你好运


如果您有任何疑问,请随时回来。

能否附上代码,说明如何在App.cs中实例化母版详细信息页面?@ColeXia MSFT查看我的更新。这足够了吗?:)嘿,所以我尝试启动一个类似这样的页面等待导航。PushAsync(新导航页面(新屏幕\ SwipeView());这导致另一个页面打开,现在有3个标题(之前有2个)还有一个添加了。所以这是一个需要修复的地方,但我需要确保它确实离开了主控详细信息页面,呈现了一个新的导航页面,并关闭了它周围的主控详细信息页面……还有,当我这样做时:Application.Current.MainPage=new NavigationPage(new Screen_SwipeView());然后下一个屏幕上只有一个栏,但也没有更多的backbutton…^^^我认为您没有正确使用
MasterDetailPage
,这实际上是导致这些问题的原因。您是否可以尝试检查此项并重新创建
MaterDetailPage