MAUI .NET 设置 Window 大小

MAUI .NET Set Window Size

如何在 MAUI 中设置 window 大小?

背景信息:我只关心此应用程序的 Windows - 我选择了 MAUI,因此我可以将 Blazor 用于桌面应用程序。出于某种原因,默认 window 尺寸很大(几乎占据了我所有的 1440p 屏幕 space)。我制作的应用程序只需要大约 600x600。有办法固定 window 大小也会有帮助,尽管我很高兴让应用程序简单地响应。

更新了 Maui GA(我也会添加到该讨论中):

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

namespace YourAppNameHere;

public partial class App : Application
{
    const int WindowWidth = 400;
    const int WindowHeight = 300;
    public App()
    {
        InitializeComponent();

        Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) =>
        {
#if WINDOWS
            var mauiWindow = handler.VirtualView;
            var nativeWindow = handler.PlatformView;
            nativeWindow.Activate();
            IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);
            WindowId windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle);
            AppWindow appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);
            appWindow.Resize(new SizeInt32(WindowWidth, WindowHeight));
#endif
        });

        MainPage = new MainPage();
    }
    ...

或者如果想要将其基于请求的 MainPage 尺寸, 附加处理程序之前可以这样做:

        MainPage = new MainPage();
        var width = (int)MainPage.WidthRequest;
        var height = (int)MainPage.HeightRequest;

然后使用这些尺寸(可能添加一些填充以获得整个 window 大小,因为 MainPage 是客户区)。


注意:我正在测试 Windows,因此在源文本编辑器窗格 upper-left 的 drop-down 中,我选择了 ... (net6.0-windows10.0.19041.0)。这就是为什么我没有注意到我需要在 using 周围添加 #if,以避免在 Android 等

上出现错误

这对我有用:

    const int WindowWidth = 400;
    const int WindowHeight = 300;

    public App()
    {
        InitializeComponent();
        
        Microsoft.Maui.Handlers.WindowHandler.Mapper.AppendToMapping(nameof(IWindow), (handler, view) =>
        {
#if WINDOWS
            var mauiWindow = handler.VirtualView;
            var nativeWindow = handler.PlatformView;

            nativeWindow.Activate();
            IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);

            var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle);
            var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);

            appWindow.Resize(new Windows.Graphics.SizeInt32(WindowWidth, WindowHeight));
#endif
        });

        MainPage = new AppShell();
    }