.NET MAUI 导航 - 返回主页/主页

问题描述 投票:0回答:2

我的目标: 在弹出窗口中拥有所有必要的页面。
enter image description here

当我单击“Hlather”页面时,我希望标题栏中可以使用后退导航按钮,当我单击后退按钮时,我应该返回主页。

我无法实现此目的,因为所有页面都充当根页面,并且后退按钮退出应用程序。

代码:

<!-- MainPage (not shown in flyout) -->
<ShellContent FlyoutIcon="O" Title="Home" Route="MainPage" ContentTemplate="{DataTemplate local:MainPage}" />

<!-- Bible, Hlather, Khutsun Hla shown in flyout -->
<FlyoutItem FlyoutIcon="O" Title="Bible" Route="Bible">
    <ShellContent ContentTemplate="{DataTemplate views:bible}" />
</FlyoutItem>
<FlyoutItem FlyoutIcon="O" Title="Hlather" Route="Hlather">
    <ShellContent ContentTemplate="{DataTemplate views:hlather}" />
</FlyoutItem>
<FlyoutItem FlyoutIcon="O" Title="Khutsun Hla" Route="Khutsun">
    <ShellContent ContentTemplate="{DataTemplate views:khutsun}" />
</FlyoutItem>
<MenuItem Text="Settings" Command="{Binding OpenSettingsCommand}" />
<MenuItem Text="Logout" Command="{Binding LogoutCommand}" />

除此之外,当我打开应用程序时,我想加载登录页面。我可以通过使用这个来部分实现这一点:

if (isLoggedIn)
{
    MainPage = new AppShell();
    isLoggedIn = false;
}
else
{
    MainPage = new login();
    //MainPage = new NavigationPage(new login());
    //isLoggedIn = false;
}

当我使用“MainPage=newlogin();”时,标题栏消失,当我使用“MainPage=newNavigationPage(newlogin());”时,标题栏消失标题栏被禁用(因为 appshell)。我不希望弹出窗口出现在这里。 我现在使用的解决方法是

MainPage = new AppShell();
Shell.Current.GoToAsync("vLogin");

我希望登录页面独立于其他页面,但仅在用户未登录时显示为单个页面。

.net navigation maui
2个回答
0
投票

关于后退导航,恐怕没有内置的方法来执行您需要的操作。这根本不是

Shell
的工作原理。所有弹出项目页面都被视为根页面。

如果您想实现自定义后退按钮行为,您可以覆盖

OnBackButtonPressed
类上的
AppShell
并在那里执行您的逻辑。 它可能会涉及跟踪您之前访问过的页面并了解何时显示它们(我认为每当您按下后退按钮时都会调用此方法,即使您不在“根”页面上)。


对于登录页面的问题,我设法将其保留在

Shell
中,禁用所有 Flyout 行为。

内部

AppShell.xaml.cs

Items.Add(new ShellContent
{
    Title = "Login",
    ContentTemplate = new DataTemplate(typeof(LoginPage)),
    FlyoutItemIsVisible = false,  // Note this
    Route = nameof(LoginPage)
});

并且

LoginPage.xaml
有这个标题(注意
FlyoutBehavior
)。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             Shell.FlyoutBehavior="Disabled"
             x:Class="...Login.Views.LoginPage">


0
投票

您可以使用

Shell.TitleView
显示后退按钮。并处理按钮的单击事件以返回主页:

    <Shell.TitleView>
        <Grid ColumnDefinitions="2*,8*">
            <Button Text="Back" Clicked="Button_Clicked" HorizontalOptions="Start" Grid.Column="0"/>
        </Grid>
    </Shell.TitleView>

在后面的代码中:

 private void Button_Clicked(object sender, EventArgs e)
 {
     Shell.Current.GoToAsync("///MainPage");
 }
© www.soinside.com 2019 - 2024. All rights reserved.