繁体   English   中英

如何使用 Prism 保存导航堆栈从 MasterDetailPage 导航到 Xamarin forms 中的 ContentPage?

[英]How do I navigate from MasterDetailPage to ContentPage in Xamarin forms using Prism saving the navigation stack?

我正在开发 Xamarin+Prism 应用程序,现在面临一个问题。 该应用程序使用 MasterDetailPage 作为布局。 详细信息页面包含一个带有少量标记的 google map。 当您点击标记时,会出现一个弹出窗口,如果您点击此弹出窗口,应该会打开一个单独的视图(我们称之为 Page1)。

我希望这个视图不是 MasterDetailsPage 的一部分,同时在顶部导航面板上有一个“返回”按钮。 此“返回”按钮应返回 MasterDetailsPage。 问题来了。 我还没有找到办法做到这一点。 如果你不使用 Prism,直接推送到 NavigationStack 就很简单了。 但是 Prism 不允许你这样做,你只有 NavigationService 和 NavigateAsync。 有没有办法实现这种行为? 或者可能有任何黑客行为?

MasterDetails页面代码

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="Find.Views.MainPage"
             xmlns:pages="clr-namespace:Find.Views">
    <MasterDetailPage.Master>
        <pages:MenuPage />
    </MasterDetailPage.Master>
</MasterDetailPage>

我尝试了几种导航方式,例如:

await NavigationService.NavigateAsync($"Page1");
await NavigationService.NavigateAsync($"/Page1");
await NavigationService.NavigateAsync($"NavigationPage/Page1");

和其他人,但没有任何效果。

我发现了类似的问题,但那里的答案不正确。 https://ios.developreference.com/article/13334449/How+do+you+navigate+Xamarin+Forms+using+Prism+from+Master+Detail+to+Content+Page+without+Master+Detail

提前致谢。

你想达到像下面的GIF这样的结果吗?(注:我会在点击按钮时导航一个page1)

在此处输入图像描述

首先,我在RegisterTypes方法中注册了我的页面,如下面的代码。

 protected override void RegisterTypes(IContainerRegistry containerRegistry) {

            containerRegistry.RegisterForNavigation<MenuPage>();
            containerRegistry.RegisterForNavigation<NavigationPage>();

            containerRegistry.RegisterForNavigation<ViewA>();
            containerRegistry.RegisterForNavigation<Page1>();
            containerRegistry.RegisterForNavigation<ViewB>();
        }

如果你想要一个后退箭头,你需要让你的导航页面不在根导航堆栈中。

例如。 我默认显示 ViewA,这个导航代码如下

 await _navigationService.NavigateAsync(nameof(NavigationPage) + "/" + "ViewA");

然后,当我们想从 ViewA 导航到 Page1 时,我们应该使用以下代码来显示后退箭头。

 await _navigationService.NavigateAsync(nameof(NavigationPage) + "/" + "ViewA" + "/" + "Page1");

我上传了我的demo,你可以参考一下。

https://github.com/851265601/XFromsPrismNavi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM