.net MAUI 如何在启动时最大化应用程序

pas*_*x64 5 .net maui maui-windows

如何使 .net MAUI 应用程序在启动时最大化 Windows 上的窗口?目前它是从一个小窗口开始的,我不希望用户必须不断地最大化它。

谢谢,

Jos*_*ary 8

尝试这个:

public App()
{
        this.InitializeComponent();

        Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) =>
        {
#if WINDOWS
            var nativeWindow = handler.PlatformView;
            nativeWindow.Activate();
            IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);
            ShowWindow(windowHandle, 3);
#endif
        });

      
    }
#if WINDOWS
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int cmdShow);
#endif
}
Run Code Online (Sandbox Code Playgroud)


小智 5

maui 团队必须等待 winui 团队实现任何缺失的功能,以便他们可以访问 Windows 特定的属性,但此github 讨论显示了一些可以插入到 MauiApp.CreateBuilder() 方法中的解决方法。

如果应用程序在 Windows 上运行,则解决方法会调用 Windows 本机服务。从那里您可以插入任何 WinUI3 方法,但这是我根本不熟悉的东西。我采纳了 LanceMcCarthy 的答案,在启动时最大化窗口,或者在演示者不正确时恢复他设置的大小。我不知道 是否winuiAppWindow.Presenter永远不会是一个OverlapPresenter,但我还是把它留在那里了。

这适用于我当前的 VS2022 17.3 Preview 1 maui RC3 版本,在 Windows 11 上运行

using Microsoft.Maui.LifecycleEvents;

#if WINDOWS
using Microsoft.UI;
using Microsoft.UI.Windowing;
using Windows.Graphics;
#endif

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });
#if WINDOWS
        builder.ConfigureLifecycleEvents(events =>
        {
            events.AddWindows(wndLifeCycleBuilder =>
            {
                wndLifeCycleBuilder.OnWindowCreated(window =>
                {
                    IntPtr nativeWindowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
                    WindowId win32WindowsId = Win32Interop.GetWindowIdFromWindow(nativeWindowHandle);
                    AppWindow winuiAppWindow = AppWindow.GetFromWindowId(win32WindowsId);
                    if(winuiAppWindow.Presenter is OverlappedPresenter p)
                        p.Maximize();
                    else
                    {
                        const int width = 1200;
                        const int height = 800;
                        winuiAppWindow.MoveAndResize(new RectInt32(1920 / 2 - width / 2, 1080 / 2 - height / 2, width, height));
                    }
                });
            });
        });
#endif
        return builder.Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我涉足 maui 的短短几个月内,winui 就取得了很多进展,而且还有更多计划(winui 路线图),因此任何重大缺陷都可能很快得到修复,尤其是 maui 现在随时都会推出通用版本。