如何清除 Xamarin/MAUI 中的导航?

2024-03-03

我有以下应用程序结构:

Main Page : Choose Login Type A or B

if the user choses login type A then navigate to > Page A1 Credentials for A type
if the user choses login type B then navigate to > Page B1 Credentials for B type

if Login is successful for page A1 navigate to > Page A2
if Login is successful for page B1 navigate to > Page B2


            Page A1 --- Login Successful ---> Page A2
          /
         /
        /
Page 1  \
         \
          \
            Page B1 --- Login Successful ---> Page B2

如果用户位于页面 A1 或 B1,我希望他可以根据需要返回到页面 1。但是,如果用户使用类型 1 或 2 登录并到达 A2 或 B2,则不应允许他返回。

这是我的代码:

在转到 A2 或 B2 页面之前,我会运行。 (此代码在页面A1、B1中执行):

public static void RemoveAllPagesFromNavigation(INavigation Navigation)
    {
        var existingPages = Navigation.NavigationStack.ToList();
        foreach (var page in existingPages)
        {
            if (page != null)
            {
                Navigation.RemovePage(page);
            }
        }
    }

RemoveAllPagesFromNavigation(this.Navigation);
await Navigation.PushAsync(new PageA2());       // Or PageB2

但功能从导航中删除所有页面引发异常,指出 NavigationStack 的第一个元素为 null;

我添加了一个条件来跳过第一页为空的情况,该函数运行但最终用户仍然能够返回到页面第 1 页。

如何防止用户返回页面 1、A1 或 B2?


根据Shell 导航/绝对路线 https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/shell/navigation?view=net-maui-7.0#absolute-routes, 指某东西的用途//在路线的开始处将replace当前的导航堆栈。这样就无处可退了。

await Shell.Current.GoToAsync("//Page2");

仅供参考替代方案:

有另一种导航范例,导航页面 https://learn.microsoft.com/en-us/dotnet/maui/user-interface/pages/navigationpage缺少诸如“路线”之类的 appshell 功能。优点是对导航堆栈进行简单、直接、编程的控制。 (没有 AppShell 引入的微妙之处。您已经遇到过其中之一。)

考虑使用NavigationPage在登录过程中,只有当用户进入您的主要内容时才会进入 AppShell。 (或者完全省略 AppShell,只需为您的应用程序使用 NavigationPage。)

为此,请在 App.xaml.cs 中替换:
MainPage = new AppShell();
with:
MainPage = new NavigationPage();.

然后使用NavigationPage显示第一个登录页面等功能。不要使用我之前链接的 AppShell 导航文档中的任何内容。

如果登录成功后,您想使用AppShell导航,请执行以下操作:
Application.Current.MainPage = new AppShell();.


第三种选择:

Do Application.Current.MainPage = new MyNextFascinatingPage();逐步完成登录序列。因此,在这些步骤中,用户无处可返回。 (如果你想让他们回去,你可以通过创建一个明确地这样做new前一页的副本。)

登录成功后,执行:
Application.Current.MainPage = new AppShell();.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何清除 Xamarin/MAUI 中的导航? 的相关文章

  • 在 Xamarin 中读取 iOS 的相机权限

    我有一个用 Xamarin 开发的 iOS 应用程序 当应用程序没有访问麦克风的权限时 如果用户尝试从应用程序访问麦克风 我会使用以下命令检查设置AVAudioSession SharedInstance RequestRecordPerm
  • 将字节数组保存为 Android 设备文件夹中的 jpg 文件

    我正在尝试将图像保存在 Android 设备的文件夹中 我使用的代码如下 var newFolder AndroidEnvironment GetExternalStoragePublicDirectory AndroidEnvironme
  • 如何更改 .NET MAUI Blazor 项目中的默认字体?

    我有一个用于 NET MAUI Blazor 应用程序的默认 Visual Studio 项目 针对 Windows x64 构建 我尝试了两种不同的更改字体的方法 在MauiProgram cs中有一个字体的配置ConfigureFont
  • 带旋转器的时间选择器?

    我正在尝试构建一个 TimePickerDialog 但不幸的是出现的时间选择器使用起来非常麻烦 有什么方法可以构建一个像 Android 使用的旧时间选择器一样的时间选择器 如下所示 我的代码如下 ButtonTime Click del
  • 无法在设备上启动 Xamarin.iOS 应用程序

    我正在使用 Xamarin iOS 和 MVVMcross 开发 iPad 应用程序 所以我有一个带有视图模型和模型的 PCL 以及带有视图的 iOS 项目 我使用视觉工作室 之前 我使用 Xamarin iOS 6 3 6 beta 版本
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • 预览 Xamarin 表单页面

    有没有办法在不先部署到设备 模拟器的情况下预览 Xamarin 表单页面 或者有什么方法可以实时编辑页面并查看某处的更改 有点像 WPF 的史努比 我尝试了 Xamarin Studio Visual Studio 但没有看到设计器 201
  • 使用 SQLite.Net.Async 的 Xamarin.Forms

    我已按照此处的说明进行操作http developer xamarin com guides cross platform xamarin forms working with databases http developer xamari
  • GetAsync 请求返回空内容

    我想知道为什么当我在邮递员中尝试它有数据返回时它返回 null 这是我的代码 public async Task
  • Xamarin Forms:无法添加 RESX 进行全球化

    尝试按照以下方式使用 Xamarin 上的全球化功能guide https developer xamarin com guides xamarin forms advanced localization 但是找不到Misc类别也不Reso
  • 我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

    我们有一个可自定义颜色的应用程序 这使得列表视图中所选项目的橙色 Android 默认值有时看起来很糟糕 我们想要更改列表视图所选项目的颜色 我知道如何在我们页面的后台代码 xaml cs 中执行此操作 并且我知道您可以在 styles x
  • Xamarin Apple 帐户错误:加载证书时出错:对象引用未设置到对象的实例

    我正在尝试解决我有这个问题 https stackoverflow com questions 69286865 a valid provisioning profile for this executable was not found
  • Xamarin.iOS 目标 iOS 6 SDK

    我们已升级到 XCode 5 和 Xamarin iOS 7 x 但有一个应用程序尚未准备好支持 iOS 7 有没有办法以 iOS 6 0 SDK 为目标 并编译应用程序 使其具有旧的 iOS 6 键盘等 我们尝试更改 iOS Build
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • Xamarin.Forms 按钮的内容

    我正在尝试将自定义内容添加到 Xamarin Forms 中的按钮 默认情况下 按钮是这样创建的
  • 汉堡菜单棱镜xamarin形式?

    我正在尝试在 Xamarin Forms 中使用 Prism 创建一个应用程序 Xamarin 表单版本 2 3 3 175 棱镜版本 6 2 0 汉堡菜单可以在 Android 中使用 但是当我在 UWP 上运行它时 它不会显示图标 而且
  • SQLite-Net 扩展 - GetAllWithChildrenAsync 未提取所有内容

    我正在尝试使用 SQLite Net 扩展来创建关系数据库 我在尝试从数据库中提取 Term 对象时遇到了问题 它成功地撤回了其关联的课程 但未撤回与课程关联的评估和笔记 我不确定问题是否在于如何将对象插入数据库 如何从数据库中提取对象 或
  • 如何在xamarin中隐藏导航工具栏图标?

    我想在 xamarin 中隐藏导航栏按钮 我怎样才能使用绑定来做到这一点 工具栏项目没有 可见 财产 以下是我的xaml代码 请帮我解决这个问题 我建议构建一个可绑定的 ToolBoxItem 这样您就可以通过视图模型属性控制可见性 一个实
  • 如何在 Xamarin Forms 中制作卡片式 ListView

    我正在尝试根据 ahaliav Fox 的 xaml 示例在 Xamarin Forms 中制作基于卡片的 listViewhere https stackoverflow com questions 30807313 how to add
  • 如何在 Xamarin.iOS 中使用 @selector

    现在我想在我的 xamarin iOS 项目中实现一些功能 我找到了解决方案 但在 Objective C 中实现 它使用了关键字 selector 我发现这个问题 https stackoverflow com questions 321

随机推荐