簡體   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