【问题标题】:PRISM Navigation - Xamarin Forms - MasterDetail/FlyoutPage page setup, previous page nav links disabled when back button pressed?PRISM Navigation - Xamarin Forms - MasterDetail/FlyoutPage 页面设置,按下后退按钮时禁用前一页导航链接?
【发布时间】:2022-02-11 03:22:43
【问题描述】:

所以我使用 Prism Library 和 Xamarin Forms 构建了一个应用程序,导航流程从 MasterDetail 页面开始,就像这样。

NavigationService.NavigateAsync($"/{nameof(MainMenuPage)}/{nameof(NavigationPage)}/{nameof(DashboardPage)}");

主菜单页面

我的 MainMenuPage 包含带有 MenuItem 的 ListView 的 Flyout 页面

<FlyoutPage.Flyout>
    <NavigationPage
        NavigationPage.HasNavigationBar="false"
        Icon="{ StaticResource HamburgerIcon }"
        Style="{ StaticResource MainMenuStyle }"
        Title="{ grial:Translate PageTitleMainMenu }">
        <x:Arguments>
            <ContentPage>
                <Grid>
                    <BoxView
                        Style="{ StaticResource MainMenuOrModalBackgroundStyle }"
                        Opacity="1" />

                    <Image
                        Style="{ StaticResource MainMenuBackgroundImageStyle }" />

                    <Grid
                        grial:Effects.ApplyIOSSafeAreaAsPadding="Left,Right"
                        RowSpacing="0"
                        VerticalOptions="FillAndExpand">
                        <Grid.RowDefinitions>
                            <RowDefinition
                                    Height="Auto" />
                            <RowDefinition
                                    Height="*" />
                            <RowDefinition 
                                    Height="Auto"/>
                        </Grid.RowDefinitions>

                        <local:BrandBlock
                                Grid.Row="0"
                                Grid.Column="0"
                                Margin="20,60,20,30"
                                VerticalOptions="Start"
                                HorizontalOptions="Start" />

                        <ListView
                                Margin="0,0,0,10"
                                Grid.Row="1"
                                SelectedItem="{ Binding SelectedMainMenuItem, Mode=TwoWay}"
                                ItemsSource="{ Binding MainMenuItems }"
                                VerticalOptions="FillAndExpand"
                                Style="{ StaticResource MainMenuListViewStyle }">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <ViewCell>
                                        <views:MainMenuItemTemplate />
                                    </ViewCell>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                            <ListView.Behaviors>
                                <behavior:EventToCommandBehavior EventName="ItemTapped"
                                                                 Command="{Binding NavigateCommand}"
                                                                 EventArgsParameterPath="Item">
                                                                 
                                </behavior:EventToCommandBehavior>
                            </ListView.Behaviors>
                        </ListView>

                        <views:ApplicationVersionTemplate Grid.Row="2" Margin="35,0,0,20" HorizontalOptions="Start" VerticalOptions="Start" />
                    </Grid>
                </Grid>
            </ContentPage>
        </x:Arguments>
    </NavigationPage>
</FlyoutPage.Flyout>

<FlyoutPage.Detail>
    <NavigationPage>
        <x:Arguments>
            <ContentPage>
                <Grid></Grid>
            </ContentPage>
        </x:Arguments>
    </NavigationPage>
</FlyoutPage.Detail>

我正在使用以下格式导航到详细信息页面:

await NavigationService.NavigateAsync($"{nameof(NavigationPage)}/{SelectedMainMenuItem.PageName}", null, SelectedMainMenuItem.IsModal, SelectedMainMenuItem.IsAnimated);

我注意到在很多示例中,MasterDetailPage.Master 节点位于 ContentPage 中,而不是像我正在做的 NavigationPage 节点中。那是我做错了吗?在我看来,NavigationPage 是这里的 Master 的孩子。那是对的吗?只是想弄清楚为什么当我返回上一页时(通过按导航栏中的后退按钮)该页面被禁用,这意味着导航链接不再起作用。我最初的根页面导航是绝对的,所有其余的导航命令都是相对的。

注意 - 我将 MasterDetailPage 更改为 FlyoutPage,因为 Xamarin.Forms v5 中的命名已更改。这个错误是在我将名称更改为 FlyoutPage 之前发生的。

【问题讨论】:

    标签: xamarin.forms prism


    【解决方案1】:

    我不知道FlyoutPage.Detail,但是MasterDetailPage.Content在xaml中应该留空,导航时会自动填充。

    另外,使用MasterDetailPage,我导航到../SomeOtherPage 以将其添加到堆栈(启用后退按钮)。导航到/MainPage/NavigationPage/AnotherPage 以替换堆栈(没有返回按钮)。

    【讨论】:

      【解决方案2】:

      因此,我将代码回滚到以前的版本,然后一次一个地添加回包和代码更改,并在此过程中对每次迭代进行冒烟测试。我最好的猜测是 Xamarin 包的 Telerik UI 和最新的 Xamarin Forms 版本之间存在冲突,但我不能确定。我将 Xamarin Forms 和 Prism 更新为最新更新,一切正常。

      【讨论】:

        猜你喜欢
        • 2016-06-06
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 2016-11-21
        • 2019-12-11
        • 2013-10-01
        相关资源
        最近更新 更多