Xamarin.Forms - 主/详细页面和导航历史记录问题

Sof*_*San 10 c# master-detail xamarin.forms

我有一个使用masterdetail页面在所有页面显示菜单的应用程序.导航在我的应用程序中以两种方式发生.一个来自菜单,另一个来自仪表板.因此,如果我导航到另一个页面,然后按"返回"按钮,它将关闭该应用程序.它不记得导航历史记录.主详细信息页面如下:

 public class RootPage : MasterDetailPage
    {
        public RootPage ()
        {
            var menuPage = new MenuPage ();

            menuPage.Menu.ItemSelected += (sender, e) => NavigateTo (e.SelectedItem as MenuItem);

            Master = menuPage;
            Detail = new NavigationPage (new ContractsPage ());
        }

        void NavigateTo (MenuItem menu)
        {
            Page displayPage = (Page)Activator.CreateInstance (menu.TargetType);
            Detail =    new NavigationPage (displayPage);
            IsPresented = false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以任何想法如何克服这个问题?

小智 18

就像@ Sten-Petrov所说:你正在取代细节页面而不是触发历史机制.要触发历史记录机制,您需要在Detail页面的Navigation属性上执行PushAsync(Page).

在您的示例中,更改NavigateTo:

 void NavigateTo (MenuItem menu)
 {
     Page displayPage = (Page)Activator.CreateInstance (menu.TargetType);
     Detail.Navigation.PushAsync(displayPage);
 }
Run Code Online (Sandbox Code Playgroud)

这不会取代内容,但会打开一个带有所需后退按钮功能的新页面.

如果你想要使用Master-Detail页面的后退按钮功能,那么你需要自定义后台堆栈过程,在我看来,这是不值得的.在这种情况下,只需移动到不同的页面/导航结构.