.NET MAUI Windows平台:如何禁用窗口调整及配置窗口参数?
MAUI WinUI 窗口控制解决方案
以下是实现你需求的完整代码及说明,基于你提供的App类修改:
using Microsoft.UI.Xaml; using Microsoft.UI.Windowing; using Windows.Graphics; namespace FigureCollapse.WinUI { public partial class App : MauiWinUIApplication { public App() { AppData.AsignAppData(ApplicationData.Current.LocalFolder.Path, true); Lang.SelectAppLang(AppData.AppConfig["Language"]); this.InitializeComponent(); this.WindowCreated += OnWindowCreated; } protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); private void OnWindowCreated(object sender, WindowCreatedEventArgs args) { var window = args.Window; var appWindow = GetAppWindowForWindow(window); if (appWindow == null) return; // 读取配置项 var resolutionConfig = AppData.AppConfig["Resolution"]; var isFullscreen = bool.Parse(AppData.AppConfig["IsFullscreen"]); var windowSize = ParseResolution(resolutionConfig); // 禁用最大化/最小化按钮 + 禁止调整窗口大小 appWindow.TitleBar.IsMaximizeButtonEnabled = false; appWindow.TitleBar.IsMinimizeButtonEnabled = false; appWindow.ResizeMode = ResizeMode.NoResize; if (isFullscreen) { // 切换至全屏模式 appWindow.SetPresenter(AppWindowPresenterKind.FullScreen); } else { // 设置窗口尺寸并居中 appWindow.Resize(windowSize); CenterWindow(appWindow); } } // 获取WinUI AppWindow实例 private AppWindow GetAppWindowForWindow(Window window) { if (window.Content is FrameworkElement rootElement) { var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(window); return AppWindow.GetFromWindowId(Win32Interop.GetWindowIdFromWindow(hwnd)); } return null; } // 解析分辨率字符串(格式:宽度x高度,如"1920x1080") private SizeInt32 ParseResolution(string resolutionStr) { var parts = resolutionStr.Split('x'); if (parts.Length == 2 && int.TryParse(parts[0], out int width) && int.TryParse(parts[1], out int height)) { return new SizeInt32(width, height); } // 解析失败时返回默认尺寸 return new SizeInt32(1280, 720); } // 将窗口居中显示 private void CenterWindow(AppWindow appWindow) { var displayArea = DisplayArea.GetFromWindowId(appWindow.Id, DisplayAreaFallback.Primary); if (displayArea != null) { var windowSize = appWindow.Size; var centeredPos = new PointInt32( (displayArea.WorkArea.Width - windowSize.Width) / 2, (displayArea.WorkArea.Height - windowSize.Height) / 2 ); appWindow.Move(centeredPos); } } } }
功能实现细节
- 禁止调整窗口大小:通过
appWindow.ResizeMode = ResizeMode.NoResize直接禁用窗口拖拽缩放功能,这是WinUI 3中控制窗口可调整性的原生API。 - 设置窗口尺寸:解析配置中的
Resolution字符串,调用appWindow.Resize()设置窗口宽高;辅助方法CenterWindow确保窗口在屏幕居中显示。 - 切换窗口/全屏模式:读取配置中的全屏标记(示例用
IsFullscreen键),若为true则调用SetPresenter(AppWindowPresenterKind.FullScreen)进入全屏,否则保持窗口模式。 - 禁用最大化/最小化按钮:通过
TitleBar.IsMaximizeButtonEnabled和TitleBar.IsMinimizeButtonEnabled属性直接关闭对应按钮功能。
注意事项
- 确保配置中
Resolution的格式为宽度x高度(如1920x1080),若格式不合法会使用默认尺寸; - 全屏模式下系统会自动覆盖窗口尺寸设置,无需重复调用
Resize; - 若你的全屏配置键名不是
IsFullscreen,请修改代码中对应的键名; GetAppWindowForWindow是MAUI WinUI中获取窗口核心控制实例的标准方式,依赖WinRT互操作API。
内容的提问来源于stack exchange,提问作者Giancarlo Franco
相关产品推荐
相关产品推荐

