(原创)【MAUI】在窗口(页面)关闭后获取其返回值
一、前言
作为一名 Winform 和 WPF 的老用户,没想到 MAUI 上变化那么大。
就像传统的窗口,我弹出一个模式窗口,关闭窗口后是可以获取到窗口的返回值的,即: DialogResult。后续根据返回值的不同,来执行不同的操作。
但是在 MAUI 这里,没有了“窗口”,只剩下了“页面”,新页面的显示是通过“导航”的方式去实现的,没有了 ShowDialog(),自然也没有了 DialogResult。
但是获取页面关闭后不同的返回值,进而执行不同的操作,是很必要的。
既然官方没有提供,我们就自己动手,丰衣足食。
相信看完的你,一定会有所收获!
https://www.cnblogs.com/lesliexin/p/16588060.html
二、实现原理
本次实现的关键点在于:怎么确定页面关闭了?
因为在 MAUI 中,页面是以“导航”的方式呈现的,没有办法直接判断子页面是否已经关闭。
所以我们需要用到主页面的 NavigationTo 事件(Appearing 事件也可以实现类似效果,不过 Appearing 被触发的时机太多,所以这里采用 Navigation 事件)。
具体的实现过程如下。
三、代码实现
(一)创建 MAUI 程序。
按照VS提示创建即可,此处不再赘述。

(二)子页面
我们添加一个新页面,名称保持默认。

1,设计器代码
我们添加一个标签标、和“确定”、“取消”两个按钮。

2,后台代码
我们添加一个bool属性:IsOK,用来标识是点击了“确定”按钮还是“取消”按钮。
点击“确定”按钮和“取消”按钮时,先设置属性 IsOK,然后关闭当前页面。
因为是导航的方式,所以与常规的窗口不同,页面是能响应“返回键”的(当然也可以使用模式导航的方式来不显示返回键)。
所以我们需要重写页面的 OnBackButtonPressed 方法。
简单起见,我们在点击“返回键”时,将属性 IsOK 设置为 False。

(三)主页面
1,设计器
修改设计器代码,添加一个标签和一个按钮。

2,后台代码
首先,我们定义一个全局的子页面变量,因为要在其它地方用到。
接着,在点击按钮时,我们弹出子页面。
最后,我们实现 NavigationTo 事件,在触发时,先判断子页面是否为 Null,不为 Null 则获取其返回值,根据其属性 IsOK 的不同值,显示不同的信息。

四、效果演示
我们编译运行程序,可以看到和 Winform/Wpf 中的 ShowDialog 效果类似,可以在新窗口(页面)关闭后获取不其返回值,进而根据不同的返回值执行不同的操作。
1,Windows 端效果:

2,Android 端效果:

五、源代码下载
https://files.cnblogs.com/files/lesliexin/MauiDemoDialogResult.7z
六、总结
每个框架都有属于自己的逻辑和思路,顺着框架的逻辑和思路去编写代码是最合适的。
但是像我这种一直使用 Winform 和 Wpf 的人,思考逻辑也是 Winform 和 Wpf 那套,思路的转变有些困难,导致在接受新框架时格外费力。
所以也就会有很多“野路子”的实现,哈哈哈哈。
-【END】-
(原创)【MAUI】在窗口(页面)关闭后获取其返回值的更多相关文章
- springmvc下js控制表单提交(表单提交前检验,提交后获取json返回值)
这个问题我搞了四天,终于搞懂.因为对js很不熟悉.郁闷的是后台代码出错总可以设置断点调试,前端js代码出错只能通过浏览器提供一些运行数据来分析,很不习惯. 首先说下逻辑:这是一个注册功能,我希望,注册 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
- Intent获取Activity返回值
/* Intent获取Activity返回值* 三步:* 子Activity关闭后的返回值处理函数,requestCode是子Activity返回的请求码,与页面顶端的两个请求码相匹配,resultC ...
- Shell $?获取函数返回值或者上一个命令的退出状态
Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...
- activity之间參数传递&&获取activity返回值&&activity生命周期
Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- 用jquery的ajax方法获取return返回值的正确姿势
如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...
- python获取线程返回值
python获取线程返回值 前言 工作中的需求 将前端传过来的字符串信息通过算法转换成语音,并将语音文件返回回去 由于算法不是我写的,只需要调用即可,但是算法执行速度相当缓慢 我的优化思路是,将前端的 ...
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
随机推荐
- Node.js精进(1)——模块化
模块化是一种将软件功能抽离成独立.可交互的软件设计技术,能促进大型应用程序和系统的构建. Node.js内置了两种模块系统,分别是默认的CommonJS模块和浏览器所支持的ECMAScript模块. ...
- ExtJS 布局-Border 布局(Border layout)
更新记录: 2022年6月11日 发布. 2022年6月1日 开始. 1.说明 边框布局允许根据区域(如中心.北部.南部.西部和东部)指定子部件的位置.还可以调整子组件的大小和折叠. 2.设置布局方法 ...
- vue封装手机验证码
// 获取验证码 let endMsRes = new Date().getTime() + 45000; localStorage.setItem("myEndTime", JS ...
- centos 7搭建svn+apache及权限控制
SVN服务器运行模式: 模式1:svn服务器单独运行 监听: 3690端口 访问: svn://IP 模式2: svn 服务器+ apache : 80 端口 访问: http://IP 1. #安装 ...
- bat-注册表修改win11右键风格
展开:reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&q ...
- 为什么不建议使用自定义Object作为HashMap的key?
此前部门内的一个线上系统上线后内存一路飙高.一段时间后直接占满.协助开发人员去分析定位,发现内存中某个Object的量远远超出了预期的范围,很明显出现内存泄漏了. 结合代码分析发现,泄漏的这个对象,主 ...
- List集合五种遍历方式
一.使用Iterator接口遍历 二.普通for循环遍历 三.增强for循环遍历 四.List集合自带迭代器 五.Lambda(JDK8新增特性) //使用多态方式创建对象 List<Strin ...
- myeclipse添加subclipse插件支持subversion1.9
为了安装subclipse插件,费了很多周折,本来我以为直接用eclipse marketplace搜索安装就行,可是由于网络原因,安装不了. 然后下载安装包吧.目前从国内网站上下载不了支持subve ...
- day01 File类_Lambda
File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等 ...
- 使用uart串口接收模块接收信号,控制led灯闪烁
功能描述: 使用遵循uart协议的接收模块接收控制信号,用来控制led的闪烁. 设计输入: 1.uart输入信号 2.时钟信号 3.复位信号 4.led信号 设计思路: 总体上:前面已经写了串口接收模 ...