.NET MAUI实战 Navigation

1.概要

用过WPF的小伙伴一般都用过Prism,Prism里面的导航概念在MAUI中也有类似的概念,在MAUI中是直接集成在框架中我们不需要安装任何其他的nuget包。直接使用Navigation对象即可,通常在移动平台中使用的更多,桌面程序中。我们先来看看微软官方是如何定义的,如下面代码所示。

public interface INavigation{IReadOnlyList<Page> ModalStack { get; }IReadOnlyList<Page> NavigationStack { get; }void InsertPageBefore(Page page, Page before);Task<Page> PopAsync();Task<Page> PopAsync(bool animated);Task<Page> PopModalAsync();Task<Page> PopModalAsync(bool animated);Task PopToRootAsync();Task PopToRootAsync(bool animated);Task PushAsync(Page page);Task PushAsync(Page page, bool animated);Task PushModalAsync(Page page);Task PushModalAsync(Page page, bool animated);void RemovePage(Page page);}

我这里是直接找到了Navigation的上层接口的定义。那我们来看看几个基本的介绍。

名称类型说明
PopToRootAsync方法导航到根目录。
PopAsync方法导航到上一个页面。
PushAsync方法导航到指定页面。

2.详细内容

接下来演示一下基本用法。防止大家被绕晕这里整理了一下导航图,如下:

faf97f5f39b79818e97dfb507c9e80ae.png

MainPage.xaml代码:

bf2b6110358a2436c74d28fd9f7d30da.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="MauiApp1.MainPage"><ScrollView><VerticalStackLayout Spacing="25" Padding="30,0" VerticalOptions="Center"><Button x:Name="BtnPage1"Text="Page1"Clicked="BtnPage1_Clicked"HorizontalOptions="Center" /><Button x:Name="BtnPage2"Text="Page2"Clicked="BtnPage2_Clicked"HorizontalOptions="Center" /></VerticalStackLayout></ScrollView>
</ContentPage>
namespace MauiApp1;public partial class MainPage : ContentPage
{public MainPage()
{InitializeComponent();}private void BtnPage2_Clicked(object sender, EventArgs e)
{Navigation.PushAsync(new NewPage2());}private void BtnPage1_Clicked(object sender, EventArgs e)
{Navigation.PushAsync(new NewPage1());}
}

Page1.xaml代码

02b9a4a2f7dd670585049cde4b3b6aa9.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="MauiApp1.NewPage1"Title="NewPage1"><VerticalStackLayout><Label Text="Welcome to .NET MAUI!"VerticalOptions="Center" HorizontalOptions="Center" /><Button x:Name="BtnNext"Text="Netxt Page"Clicked="BtnNext_Clicked"HorizontalOptions="Center" /><Button x:Name="BtnGoback"Text="Go back"Clicked="BtnGoback_Clicked"HorizontalOptions="Center" /></VerticalStackLayout>
</ContentPage>
namespace MauiApp1;public partial class NewPage1 : ContentPage
{public NewPage1()
{InitializeComponent();
}private void BtnNext_Clicked(object sender, EventArgs e)
{Navigation.PushAsync(new NewPage2());}private void BtnGoback_Clicked(object sender, EventArgs e)
{Navigation.PopAsync();}
}

Page2.xaml代码

c448e5a603e455220c629a6e5cbb6a19.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="MauiApp1.NewPage2"Title="NewPage2"><VerticalStackLayout><Label Text="Welcome to .NET MAUI!"VerticalOptions="Center" HorizontalOptions="Center" /><Button x:Name="BtnGoback"Text="Go to root"Clicked="BtnGoback_Clicked"HorizontalOptions="Center" /></VerticalStackLayout>
</ContentPage>
namespace MauiApp1;public partial class NewPage2 : ContentPage
{public NewPage2()
{InitializeComponent();
}private void BtnGoback_Clicked(object sender, EventArgs e)
{Navigation.PopToRootAsync();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区

mysqld进程在一个写入当中被杀死。计算机的意外关闭(例如&#xff0c;如果计算机掉电)。一个硬件错误这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多&#xff0c;你应该尝试找出其原因&#xff01;见G.1 调试一个MySQL服务器。在执行崩溃恢复时&#xf…

关于响应式布局,你必须要知道的

一、前言 响应式Web设计可以让一个网站同时适配多种设备和多个屏幕&#xff0c;可以让网站的布局和功能随用户的使用环境&#xff08;屏幕大小、输入方式、设备/浏览器能力&#xff09;而变化。本文主要介绍一些响应式布局容易忽略但又很重要的知识点。 二、视口 移动前端中常说…

python报错 scrolled: false_python 元组tuple - python基础入门(14)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python在上一篇文章中我们讲解了关于python列表List的相关内容&#xff0c;今天给大家解释一下列表List的兄弟 – 元组&#xff0c;俗称: tuple.元组tuple和列表List类似&#xff0c;元组有如下特点&#xff1a;1.由一个…

SpringBoot集成Druid不支持多条SQL

在DataSource 初始化Bean 添加 List<Filter> proxyFilters new ArrayList<Filter>();WallFilter statFilter new WallFilter();WallConfig config new WallConfig();config.setMultiStatementAllow(true); // 批量操作statFilter.setConfig(config);proxyFilte…

搭建 vue2 单元测试环境(karma+mocha+webpack3)

从网上找了很多例子关于单元测试&#xff0c;都是如何新建项目的时候的添加单元测试&#xff0c;用vue-cli中怎么添加&#xff0c;但是我的项目已经生成了&#xff0c;不能再一次重新初始化&#xff0c;这时如何添加单元测试&#xff0c;这里面遇到了好多坑&#xff0c;写在这里…

开放原子开源峰会 - SmartIDE正式开源并发布v1.0版本丨IDCF

在上周刚刚结束的【2022开放原子全球开源峰会】上 SmartIDE作为正在进行开放原子基金会TOC审核的开源项目&#xff0c;在云原生论坛上向全球的开源开发者介绍了下一代云原生CloudIDE的全新使用体验&#xff0c;并且正式发布了 SmartIDE v1.0 版本。作者&#xff1a;徐磊文章首发…

【算法学习】网络流模板……

网络流最大流&#xff08;最小割&#xff09;Dinic模板…… 1 const int INF99999999; 2 const int Maxn; 3 const int Maxm; 4 inline int Min(int p,int q){return p<q?p:q;} 5 int n,m,h[Maxn5],to[Maxm*25],cap[Maxm*25],nxt[Maxm*25],tot1,Sum0,que[Maxn5],l,r,lv[Max…

给初学者的 RxJava2.0 教程 (八)

Outline [TOC] 前言 在上一节中, 我们学习了FLowable的一些基本知识, 同时也挖了许多坑, 这一节就让我们来填坑吧. 正题 在上一节中最后我们有个例子, 当上游一次性发送128个事件的时候是没有任何问题的, 一旦超过128就会抛出MissingBackpressureException异常, 提示你上游发太…

mysql数据库的目录_了解MySQl数据库目录

数据库目录是MySQL数据库服务器存放数据文件的地方&#xff0c;不仅包括有关表的文件&#xff0c;还包括数据文件和MySQL的服务器选项文件。不同的分发&#xff0c;数据库目录的缺省位置是不同的。数据目录的位置缺省的数据库位置缺省数据库的位置编译在服务器中。◆如果您是在…

修改docker的默认存储位置及镜像存储位置

2019独角兽企业重金招聘Python工程师标准>>> 方法一、软链接 默认情况下Docker的存放位置为&#xff1a;/var/lib/docker 可以通过下面命令查看具体位置&#xff1a; sudo docker info | grep "Docker Root Dir" 解决这个问题&#xff0c;最直接的方法当然…

微信小程序第三方服务公司有哪些

虽然微信小程序还没有正式推出&#xff0c;但围绕着微信小程序第三方服务公司之间的战争早已经开始。他们在小程序生成工具&#xff08;一键生成小程序&#xff0c;无需开发&#xff09;、微信小程序开发工具、小程序数据统计等领域展开激烈竞争&#xff0c;我们一起来看看微信…

python maketrans_Python maketrans()方法 - Python 教程 - 自强学堂

Python maketrans()方法描述Python maketrans() 方法用于创建字符映射的转换表&#xff0c;对于接受两个参数的最简单的调用方式&#xff0c;第一个参数是字符串&#xff0c;表示需要转换的字符&#xff0c;第二个参数也是字符串表示转换的目标。注&#xff1a;两个字符串的长度…

Blazor University (49)依赖注入 —— 比较依赖范围

原文链接&#xff1a;https://blazor-university.com/dependency-injection/dependency-lifetimes-and-scopes/comparing-dependency-scopes/比较依赖范围源代码[1]在本节中&#xff0c;我们将创建一个 Blazor 应用程序来演示各种依赖注入作用域的不同生命周期。为此&#xff0…

CSS选择器的权重与优先规

我们把特殊性分为4个等级&#xff0c;每个等级代表一类选择器&#xff0c;每个等级的值为其所代表的选择器的个数乘以这一等级的权值&#xff0c;最后把所有等级的值相加得出选择器的特殊值。 4个等级的定义如下&#xff1a; 第一等&#xff1a;代表内联样式&#xff0c;如: st…

设计模式概论

此文转载于 http://blog.csdn.net/hguisu/article/details/74968191. 设计模式设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性…

只需要2个工具,百度云盘大文件就能用迅雷和IDM下载

不会代码&#xff0c;不懂脚本&#xff0c;没关系 &#xff0c;能找到一座通往它们的桥梁&#xff0c;照样能到达彼岸。 这里以360极速浏览器为例。 在浏览器地址框输入以下地址直接到达浏览器安装扩展插件的地方&#xff08;偷个懒&#xff0c;复制网址吧&#xff09;&#xf…

rsync服务器的配置

一、rsync 简介Rsync&#xff08;remote synchronize&#xff09;是一个远程数据同步工具&#xff0c;可通过LAN/WAN快速同步多台主机间的文件&#xff0c;也可以使用 Rsync 同步本地硬盘中的不同目录。 Rsync 是用于取代rcp的一个工具&#xff0c;Rsync使用所谓的 “Rsync 算法…

用ajax连接mysql_页面用ajax实现简单的连接数据库

(1) 写发送代码var myXmlHttpRequest "";myXmlHttpRequest getXmlHttpRequest();if (myXmlHttpRequest) { //xmlHttpRequest创建成功了&#xff0c;才能发送请求//地址一定要写正确var url "../zhuCe/zhuCeYanZheng.aspx?username" $(Text1).value;m…

Vue学习笔记入门篇——数据及DOM

本文为转载&#xff0c;原文&#xff1a;Vue学习笔记入门篇——数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象。Vue 将会递归将 data 的属性转换为 getter/setter&#xff0c;从而让 data 的属性能够响应数据变化。对象必须是纯粹的对象(含有零个或多个…

Thinkphp 3.2中控制页面不缓存

最近开发WAP网站时&#xff0c;最讨厌的就是back键&#xff0c;会造成些麻烦事。不过&#xff0c;问题总有办法解决。 有些页面&#xff0c;点击back键回退会加载缓存&#xff0c;这不是想要的&#xff0c;所以希望能够控制该页面不缓存&#xff0c;每次请求都需要从服务器获取…