android - Xamarin 表单中的 Prism 导航 - MasterDetailPage

标签 android xaml xamarin.forms prism master-detail

我使用 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/

相关文章:

c# - AuthenticateAndContinue 错误 WP 8.1

opencv - 如何在 Xamarin 中使用 openCV?

java - 注释会影响编译时间吗?

带有倒置图标的Android半透明状态栏

c# - 正则表达式 XAML 问题

c# - 按照 MVVM 设计模式从 ViewModel 访问 this.content

android - 将变量传递到 Android 中游标适配器的绑定(bind) View

java - 如何在 Android 中使用 Flavors 更改应用程序颜色

Xamarin Forms XAML HotReload 无法在 Mac 上运行

xamarin.forms - 如何将母版页菜单内容显示在导航栏下方?