(原创)【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 + @ ...
随机推荐
- Django对接支付宝Alipay支付接口
最新博客更新见我的个人主页: https://xzajyjs.cn 我们在使用Django构建网站时常需要对接第三方支付平台的支付接口,这里就以支付宝为例(其他平台大同小异),使用支付宝开放平台的沙箱 ...
- Java ES 实现or查询
es mapping里有三个字段: A:Integer B:Integer C:TEXT 现在想实现一个查询,来检索 ( (A =1 and B=2) or (c like "test ...
- 聊聊OOP中的设计原则以及访问者模式
一 设计原则 (SOLID) 1. S - 单一职责原则(Single Responsibllity Principle) 1.1 定义 一个类或者模块只负责完成一个职责(或功能), 认为&qu ...
- .NET C#基础(6):命名空间 - 组织代码的利器
0. 文章目的 面向C#新学者,介绍命名空间(namespace)的概念以及C#中的命名空间的相关内容 1. 阅读基础 理解C与C#语言的基础语法 2. 名称冲突与命名空间 2.1 一个生活例 ...
- 慢到不能忍?别忍了,Ubuntu 21.10 APT 源修改为华为云镜像源
更新记录 2022年4月15日:本文迁移自Panda666原博客,原发布时间:2021年3月29日. 2022年4月15日:将源改为华为云,华为云更方便.Ubuntu从20.04更新到21.10. 切 ...
- 第一章:Python的数据结构、函数和文件
list list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates = ['Michael', ...
- 搭建ceph分布式文件系统
1. 准备4台虚拟机 ceph 192.168.66.93 管理osd,mon节点 ceph-node1 192.168.66.94 osd节点 ceph-node2 192.168.66.95 ...
- leetcode题解#3:无重复字符的最长子串
leetcode题解:无重复字符的最长子串 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb"输出: 3 解释 ...
- Redis 笔记 01:入门篇
Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
- 游戏启动后提示安装HMS Core,点击取消,未再次提示安装HMS Core(初始化失败返回907135003)
问题描述 我们国内的华为联运游戏集成华为游戏服务SDK 之后,被审核驳回:在未安装或需要更新华为移动服务(HMS Core)的手机上,提示安装华为移动服务,点击取消,未再次提示安装HMS Core. ...