我使用 Prism 6.3 pre-2 设置了主详细信息页面,我终于让它按照我预期的方式工作,导航到“详细信息”页面;因此,汉堡包按钮显示滑动抽屉,我有一个绑定(bind)到 ViewModel 的简单 ListView,列出了一些项目,并使用 NavigateCommand 正确导航。
现在,预期的行为(在 Android 中)是当您导航到滑出式菜单中的其他项目时,您应该能够使用硬件后退按钮导航回第一个“详细信息”页面显示。
例如,假设您的应用具有此设置,并且列出的项目为“收件箱”、“草稿”和“已发送”。默认 View 将是您决定的默认详细 View ,在本例中,它很可能是“收件箱”。因此,如果我导航到“已发送”,然后按返回键,它应该返回到“收件箱”,同样,如果我转到“已发送”->“草稿”,然后按返回键,它应该返回到“收件箱”,因为这是默认起点,如果您再次按返回,应用程序应该退出。目前,使用 Prism 导航,无论您使用此设置导航到哪个页面,它都会立即退出。
请注意,我已经正确设置了它,我基本上有这样的东西(作为例子):
await NavigationService.NavigateAsync("RootPage/BaseNavigationPage/InboxPage");
当我导航到另一个页面(例如“Sent”)时,相对 URI 如下所示:
“BaseNavigationPage/SentPage”
现在,当按下返回键时,它应该返回到 InboxPage,我不知道如何解决这个问题... Brain...???
除此之外,还缺少另一种意外行为。 如果我想在使用主详细信息页面时显示模式页面,它不会像 Google 编写的任何应用程序那样工作......如果您打开任何具有此布局的 Google 应用程序,很容易看到。如果您显示“设置”的模式窗口,它会弹出,设置导航标题和后退箭头,基本上看起来与您向下导航一步完全相同,例如:
"RootPage/BaseNavigationPage/InboxPage/EmailPage"
但是,如果我执行以下操作,我希望此功能可用:
"BaseNavigationPage/SettingsPage", useModalNavigation:true
如果您只是简单地使用任何 Google 制作的应用程序,您就会看到这些功能,这些功能正是我所期望的,而且感觉很自然。
有什么帮助可以实现这一目标...?再次...布莱恩...?
所有这一切都应该很简单,但事实证明并非如此......
最佳答案
要在 MasterDetailPage 方案中获得您想要的 NavigationPage 行为,您必须创建一个实现 INavigationPageOptions 的自定义 NavigationPage 并将 ClearNavigationStackOnNavigation 属性设置为 false。这将使 NavigationPage 的导航堆栈在每次导航操作时保持在适当的位置。
至于您关于模式导航的其他“预期行为”,您对模式导航的理解是错误的。模态导航不提供软件后退按钮。每当您需要软件后退按钮时,您都必须将页面包含在导航页面中,
关于android - Xamarin 表单中的 Prism 导航 - MasterDetailPage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579874/