MAUIデスクトップ側タイトルバー設定とウィンドウ調整

MAUIデスクトップ側タイトルバー設定とウィンドウ調整

MAUIを使ってデスクトップを開発し始めると、次の問題が発生し、解決策を見つけようとするでしょう。

最后更新 2023/02/07 12:22
智州Ryan
预计阅读 4 分钟
分类
MAUI
标签
.NET MAUI

この記事はネチズンが投稿した。

著者:智州ライアン

前の記事:MAUIデスクトップのタイトルバー設定とウィンドウ調整

原文へのリンク:https//blog.csdn.net/Sir_aligaduo/article/details/128880940

正面に書いた。

MAUIを使ってデスクトップを開発し始めると、次の問題が発生し、解決策を見つけようとするでしょう。

問題は

本人在使用目前 VS2022 最新版 17.4 Professional 版创建新的 MAUI APP 基于.NET6.0 项目时,发现完全找不到跟 wpf 一样的WindowStyle或者ResizeMode这样的属性,有点强迫症,一定要把这个标题栏去掉,想着应该不难,但是资料太少了,文档写的也很乱,根本无法对应到这个,找着找着,加到了Dotnet9 网站站长,在他耐心的帮忙下,我解决了这个问题,所以特别感谢Dotnet9 网站站长风中一匹狼!

mauiのWindowsの下のウィンドウは以下のようになります(私の美学ではありません)。

解決策の一つ

一开始,我是根据站长网站里提供的方法,链接: Maui 学习之路(1)-Windows 窗体设置尝试解决该问题。

通常は内部に基づいて操作できますが、操作するときは操作の問題かもしれませんが、常に実現できませんが、タイトルバーと以下のコンテンツを統合するだけで、タイトルバーはまだそこにあり、色を変えるのは良くありません。

加了网长微信,网长忍耐的帮我找了老师Chister.Wu 的 Demo,对照他的 Demo是终于把这个问题解决了,现在总括下除去原题栏的方法。

  1. 完美去掉标题栏,下面是代码,写在 MauiProgram.cs 里配置生命周期方法,具体的资料在上面的链接: Maui 学习之路(1)-Windows 窗体设置 里也有,但是看起来比较麻烦,直接看代码可能好理解一点:
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>()
		.ConfigureFonts(fonts =>
		{
			fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
			fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
		})
		.ConfigureLifecycleEvents(events =>
         {

#if WINDOWS
        events.AddWindows(windows => windows
        .OnWindowCreated(window =>
                      {
                          //window.SizeChanged += OnSizeChanged;
                          MauiWinUIWindow mauiwin = window as MauiWinUIWindow;
                          if (mauiwin == null) { return; }

                          //关闭扩展内容
                          mauiwin.ExtendsContentIntoTitleBar = false;
                          mauiwin.Title = "Hello Maui";


                          通过maui窗口句柄获取appwindow---
                          ///这里有个操蛋的东西我用最新版新建的工程没法直接getappwindow所以用了文章里的方法
                          var wndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(mauiwin.WindowHandle);
                          Microsoft.UI.Windowing.AppWindow appwin = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(wndId);

                          //对于OverlappedPresenter的解释文档在这个网址
                          //https://learn.microsoft.com/zh-tw/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.overlappedpresenter?view=windows-app-sdk-1.2

                          //大致就是OverlappedPresenter会设置这个窗口,这个窗口可以和其他窗口重叠,并对窗口标题栏 状态栏 工作栏进行设置,以及其他一些调整窗口的操作
                          var customOverlappedPresenter = Microsoft.UI.Windowing.OverlappedPresenter.CreateForContextMenu();
                          appwin.SetPresenter(customOverlappedPresenter);
                      }));
#endif
            });

        return builder.Build();

原理は、ウィンドウを作成する方法を書き換えることです。ここでは、書き換えには利点があり、ウィンドウが読み込まれた後にリフレッシュされ、私はMainpage.csの下でLoadedメソッドを書いて、タイトルバーボタンが削除されましたが、タイトルバーは削除されず、ウェブマスターの記事とデモは、この効果を達成するために組み合わせました。

効果図は以下の通り完璧に取り除いた

  1. MainPageにLoadedメソッドを直接記述します。これは私が最初に使ったメソッドです。
private void ContentPage_Loaded(object sender, EventArgs e)
    {

#if WINDOWS
        var winuiWindow = Window.Handler?.PlatformView as  Microsoft.UI.Xaml.Window;
		MauiWinUIWindow maui = winuiWindow as MauiWinUIWindow;

        winuiWindow.ExtendsContentIntoTitleBar = false;
        if (winuiWindow is null)
            return;

		var wndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(maui.WindowHandle);
        Microsoft.UI.Windowing.AppWindow appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(wndId);
        //var appWindow = maui.GetAppWindow();
        if (appWindow is null)
            return;

        var customOverlappedPresenter =  Microsoft.UI.Windowing.OverlappedPresenter.CreateForContextMenu();
        appWindow.SetPresenter(customOverlappedPresenter);
#endif
    }

欠点は、WPFのcaptionheightタイトルバーのようなものがあり、ビューが完全に更新されないことです。

以上就是去标题栏的方法,想要代码的可以去 gitee 上自己下载,链接: maui-title-handle-demo

另外对于后续窗口的大小调整,自定义放大缩小按钮可以参考MauiDemo,注意一定要看清自己的项目配置。

**参考記事 **

** デモを参照 **

MauiDemo

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カメラを使用するとアクセスできません。

继续阅读