Maui学习之路(一)--Windows窗体设置

Maui的学习之路

作为 Maui的先行者,我有话要说,微软你为了让我成为牛 B 的程序员真的是煞费苦心,你一定是觉得我不够牛逼所以针对我,存心想气死我。

好了废话不多说,Maui现在也算是正式发布了,我有点想用它来做一个桌面应用最好是支持 WindowsMac(当然 Linux我也想,但是微软不给我),于是我开始着手搞了起来。按照官方教程,下载安装 vs2022 最新预览版(Mac 也一样),勾选 Maui相关工作负载,创建 Maui模板程序,直接编译运行,一顿操作行云流水,顺利的让人直呼有戏。

OK,程序运行完美,Mac 上也很完美,而且一套代码在 WindowMac 上无缝运行,这很 nice,我开始有点信心满满。作为一名牛逼程序员我必须要有点自己的想法,比如我想做一个无边框的桌面应用,这应该很 easy,只需要更改 windowstyle 为 none(我以为是这样),因为一直以来都是这样,于是我也准备这样去做。可是找了半天无论是 Window 类或是 MauiWinUIWindow 还是 UIWindow 都没有。

我一定是眼花了,我需要更加仔细一点,我提醒自己,于是我又花了半个小时仔细找了一遍,甚至还看了点 Maui的源码(虽然我没看懂)。是的,我没有看错,是真的没有,好吧是我想得太简单了,作为跨平台程序要考虑那么多平台,这不是件容易的事,我安慰自己。

好的此路不通,那么我去看看Maui的官方教程,这一定有毕竟是官方教程吗?应该很全面。于是我又花了半个小时,看了一遍教程,很抱歉还是没有,嗯这是一件极其难的事情,毕竟是跨平台吗,可以理解。那我去找找WinUI的官方教程吧,毕竟是用的WinUI3。说干就干,我三下五除二直奔主体,功夫不负有心人,终于在标题栏里面找到了答案,虽然有答案,但是我还是想说微软真有你的,你做的这破玩意儿跟 mfc 有啥区别几乎就是原生 api 的简单封装吗,不愧是你 --- 我的巨硬(此处喊破喉咙) 。

我呵呵一笑,于是写下了 Maui Windows桌面程序修改标题栏的葵花宝典,只见上面密密麻麻写着坑爹。秘籍如下:

1、 你一定要有耐心;

2、 你一定要有耐心;

3、 你一定要有耐心;

4、 在使用该方案前你一定要注册 Windows 下的生命周期函数,参考文档:应用生命周期 - .NET MAUI | Microsoft Docs[1],你也可以不用这个方法,而是在 app 下重写 OnCreate 函数;

  • 注册生命周期函数

87fc767b8f1deb1a066070b2952c08a1.png
  • 重写 OnCreate 方法

f373e8450f40d9b2f7b4cf2f2dbb1c5d.png39b2d2d4c9006e44d3649d98ff76dc2e.png

5、 你一定要将 Maui Windows 下自带的 ExtendsContentIntoTitleBar 设置为 false(这很重要,另外 Maui Window 类下有一个 SetTitleBar,对不起这不是你想的那样,怎么修改他都无效,可能是我太水没找到方法)

6、 使用 Maui 窗口句柄(Windows 平台),获取 AppWindow,修改 AppWindow 下的 TitleBar 的相关属性,参考文档:标题栏自定义 - Windows apps | Microsoft Docs [2]

3389ac7e90a2040a9c2a38bf448723d4.png

7、 完成以上步骤,那么恭喜你,你可以拥有一个无标题栏的窗口了(实际标题栏还在,只不过和下面的正式内容合并在一起了);

8、 好了完成了上述步骤,那么你一定也想做个,可以任意控制窗体初始化大小,以及最大化窗口的功能,这很抱歉,这真的是太难了。废话不多说,直接上代码,参考文档:AppWindow Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs [3]

a) 窗体最大化需要调用 Win32Api,给窗体发送最大化事件(我做了简单的封装有需要的小伙伴可以找我要,也许还有别的方案只是我太笨)

e75ca4ec0c8ec0e036e4e0d58f7cb8cd.png

b) 改变窗体大小需要调用 AppWindowMoveAndResize 注意这个函数内部并没有考虑过 Dpi 缩放的问题,需要你自己解决

63c590086bc306c5e2c2f6eedd7f7408.png

c) 启用全屏,需要使用 AppWindowPresenter,参考文档:AppWindowPresenter Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs[4]

866a967e8b899296ae17767de473ce4e.png

终于一个简单的窗体指定窗体大小、最大化窗体、无边框的窗体终于完成了,这确实很简单,满满的都是泪(现在还有一些问题就是标题栏拖动会影响按钮没法点击)。

最后,我只能发出无能狂怒,巨硬,下次请把我当傻子可以吗?

参考资料

[1]

参考文档:应用生命周期 - .NET MAUI | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/maui/fundamentals/app-lifecycle

[2]

参考文档:标题栏自定义 - Windows apps | Microsoft Docs : https://docs.microsoft.com/zh-cn/windows/apps/develop/title-bar?tabs=wasdk

[3]

参考文档:AppWindow Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs : https://docs.microsoft.com/zh-CN/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindow?view=windows-app-sdk-1.0

[4]

参考文档:AppWindowPresenter Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs: https://docs.microsoft.com/zh-CN/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindowpresenter?view=windows-app-sdk-1.0

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

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

相关文章

Git 常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。 Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库&#…

为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效?

2019独角兽企业重金招聘Python工程师标准>>> 为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效?新手学习js或jquery时,一般是在本地调试(前端学习一般用不到服务器端),当学习到cookie一节时&…

全解小程序猜数字游戏 04《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有详细的变现教程等你来。 社区有奖励 下面有投票 本文也…

sublime text 3 安装、添加命令行启动、汉化、注册码

1. 安装sublime: 下载:http://www.sublimetext.com/3 添加命令行启动:设置环境变量->计算机->右键属性->高级系统设置->环境变量->系统变量->Path->编辑,加入";安装路径"(如:;D:\Progr…

Linux下的用户和组

2019独角兽企业重金招聘Python工程师标准>>> 用户和组 GNU/Linux 通过用户和用户组实现访问控制 —— 包括对文件访问、设备使用的控制。Linux 默认的访问控制机制相对简单直接,不过还有一些更加高级的机制,包括 ACL 和 LDAP Authentication.…

漫画C语言 做个聊天软件你不懂也得懂

学完C语言做不出东西?不存在的,咱们做一个最“隐私”的聊天器,就俩人,你和我。咱们聊天的信息你知我知没别人知。 对了,本文评论区点赞、收藏抽奖。 社区也有抽奖,本周社区抽奖帖子 :https://b…

【Microstation】第一章:Microstation三维模型构建概述

MicroStation 是国际上和AutoCAD齐名的二维和三维CAD设计软件,第一个版本由Bentley兄弟在1986年开发完成。其专用格式是DGN,并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程软件系统有限公司在建筑、土木工程、交通运输、加工工厂、离散制造…

libgdx游戏引擎开发笔记(十)SuperJumper游戏例子的讲解(篇四)---- 主游戏界面内部框架编写...

上一讲,我们已经实现了点击play进入游戏界面但仅仅是个黑屏 今天,我们就试着编写代码让它出现游戏的一些简单场景。还是在上一讲的代码基础上,我们创建两个类:World 和 WorldRenderer 1.Word类: 12345678910111213141…

看看《System.CommandLine》

记得之前出过几篇.net tool工具的文章,当时的做法是所有工具的语法分析全部自己解释,自己执行,语法的解释占了大部分时间,反而工具的功能被弱化了。其实微软有一个CommandLine框架在缓慢的发展着,至今都没有正式发布&a…

Sublime Text 3 import Anaconda 无法正常补全模块名解决办法

Sublime Text 3 Anaconda配置 在安装Sublime Text3之后我们总会安装一些插件,比如Python的Anaconda自动补全插件。但是,装好之后发现import 时无法像别的IDE里面那样自动补全模块名,就像图中一样: 解决办法在Sublime Text的git…

Android之添加固定图标到桌面

我的QQ群 1 需求 Android之添加固定图标到桌面 2 部分实现 在AndroidManifest.xml里面添加如下权限 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher.perm…

想做程序员?不同方向入门路线全解

学习计算机编程有很多方向如果你没有一个正确的路线&#xff0c;那么就会&#xff1a; 就会跟上面所说的那样&#xff0c;被迫成为一个全栈&#xff0c;这是比较尴尬的。 若你想比较准确的针对某个方向学习&#xff0c;那就继续往下看吧。 一、程序员分为哪几个方向 随着…

【转】OpenGL超级宝典笔记——纹理映射Mipmap

原文地址 http://my.oschina.net/sweetdark/blog/177812 , 感谢作者&#xff0c;若非法转载请联系本人。 目录[-] MipmappingMipmap过滤构建Mip层Mipmaps 硬件生成LOD&#xff08;多细节层次&#xff09;偏好纹理对象管理多个纹理常驻纹理纹理优先级回顾Mipmapping Mipmap是一个…

【Microstation】第二章:Microstation三维建模基础知识

本章的主要内容包括模型的显示样式(线框、光滑)、三维定位(V、T、S、F)、Microstation常见的坐标系统(世界坐标系、ACS辅助坐标系、精确绘图坐标系、)和Microstation的工作区域(2D和3D)。 一、显示样式 二、三维定位 三维定位在Microstation中显得尤为重要,常见…

实现 EF Core 6 自定义查询标记

前言在《EF Core使用Simple Logging输出日志》中&#xff0c;我们介绍了查询标记 TagWith&#xff0c;它可以帮助我们快速定位到需要的日志&#xff1a;而在 .NET 6 中&#xff0c;新增了另外一个查询标记 TagWithCallSite&#xff0c;它可以标记出代码的位置&#xff1a;var u…

0运维?微信小程序云开发增删查改【05】

在创建小程序时&#xff0c;选择云开发&#xff1a; 随后进入项目之后&#xff0c;此时整个目录如下&#xff1a; 此时我们如图目录即可找到首页位置&#xff1a; 接着咱们清除 index.wxml 代码内容&#xff1a; 在 index.wxml 中加入如下代码&#xff1a; <view> …

【Microstation】第三章:Microstation三维模型构建与编辑

本章主要讲述三维基本实体绘制、三维构造元素绘制、三维模型编辑。 一、三维基本体素绘制 对于立方体、圆柱、球、圆锥等这些基本立体单位,MS提供了专门的绘图工具。 基本体素绘制有两种方式: (1)精确绘图工具 (2&

文件系统管理相关命令

查看文件系统相关属性的命令&#xff1a;blkidblkid是一个查看磁盘设备属性相关信息的命令行工具blkid -L LABEL | UUID :根据UUID查看对应的设备是哪个blkid [-ghlv] [-c file] [-w file] [-o format][-s tag] [-t NAMEvalue] device [device ...]-i&#xff1a;显示io限制lsb…

Android之实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果

1 需求 实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果,页面滑动的时候,图标也左右滑动,但是只是显示其中的一个 https://www.captainai.net/st/ 2 代码实现 xml布局实现 <LinearLayoutandroid:id="@+id/mainLl"android:layout_width="24d…

你都用 Python 来做什么?

你们都用python做些什么呢&#xff1f; 在开发中 python 这一个语言就像是小叮当&#xff0c;而 python 的第三方库则是“百宝箱”&#xff0c;你只要想着对某一个方向进行开发&#xff0c;那么这个“百宝箱”就会给你想要的东西。 由于我是在开发多年后接触到的 python&#…