如何使用Prism保存导航堆栈在Xamarin表单中从MasterDetailPage导航到ContentPage?

6yt4nkrj  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在开发一个Xamarin + Prism应用程序,现在遇到了一个问题。这个应用程序使用MasterDetailPage作为布局。详细信息页面包含一个带有几个标记的谷歌Map。当你点击标记时,会出现一个弹出窗口,如果你点击这个弹出窗口,应该会打开一个单独的视图(我们称之为Page1)。
我希望这个视图不是MasterDetailsPage的一部分,同时在顶部导航面板上有一个"后退"按钮。这个"后退"按钮应该返回MasterDetailsPage。问题来了。我还没有找到一种方法来做到这一点。如果你不使用Prism,直接推到NavigationStack就可以很简单地做到这一点。但是Prism不允许你这样做,你只有带有NavigateAsync的NavigationService。2有什么方法可以实现这种行为吗?3或者可能有什么破解方法?
主详细信息页面代码

<?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");

和其他人,但没有工作。
我找到了类似的问题,但答案不正确。How do you navigate Xamarin Forms using Prism from Master Detail to Content Page without Master Detail

nvbavucw

nvbavucw1#

你想达到像下面GIF的效果吗?(注:单击按钮时,我将导航到一个页面1)

首先,我在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");

我上传了我的演示,你可以参考一下。
https://github.com/851265601/XFromsPrismNavi

相关问题