Mauiの学習方法1 Windowsフォームの設定

Mauiの学習方法1 Windowsフォームの設定

やっとシンプルなフォームフォームフォームサイズ指定、フォーム最大化、枠のないフォームが完成

最后更新 2022/06/02 20:52
轩研 WPF开发者
预计阅读 4 分钟
分类
MAUI
标签
.NET 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,你也可以不用这个方法,而是在 app 下重写 OnCreate 函数;
  • 注册生命周期函数

  • 重写 OnCreate 方法

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

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

  1. 上記のステップを完了すると、おめでとう、タイトルバーのないウィンドウができます(実際のタイトルバーはまだ存在しますが、下の公式コンテンツと統合されています)。

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

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

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

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

最後に、フォームサイズを指定し、フォームを最大化し、境界のないフォームがついに完成しました。これは本当にシンプルで、涙だらけです(タイトルバーのドラッグがボタンをクリックできないようにするという問題があります)。

最後に、私は無力な怒りを出すことができます、巨大なハード、次は私を馬鹿にしてください。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2024/04/11

NET MAUIオープンソースUIツールキット-Uranium

私は. NET MAUI関連のUIフレームワークを共有するためにWeChatパブリックアカウントのバックグラウンドメッセージに小さなパートナーを持っていました。今日、Dayaoは. NET MAUIオープンソース、無料のUIツールキットを共有しました。

继续阅读
同分类 / 同标签 2023/01/12

Maui Blazorはカメラを使用して

Maui BlazorのインターフェイスはWebViewでレンダリングされるため、ネイティブカメラはインターフェイスコンポーネントをバインドする必要があるため、Androidカメラを使用するとアクセスできません。

继续阅读