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();
}
如何在 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();
}