You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI Windows版本:如何移除标题栏并固定窗口尺寸为800x400像素及相关功能疑问

MAUI Windows应用:移除标题栏、固定窗口尺寸及相关问题解答

我来帮你搞定MAUI Windows端的这几个问题,针对正式版MAUI的可行方案如下:

一、移除标题栏并固定窗口尺寸(正式版MAUI方案)

正式版MAUI已经支持通过平台特定代码实现这些需求,不需要依赖旧版的兼容方案。你需要在Platforms/Windows/App.xaml.cs文件中修改OnLaunched方法,直接操作WinUI 3的窗口API:

using Microsoft.UI.Windowing;
using Windows.Graphics;

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    base.OnLaunched(args);

    // 获取MAUI窗口对应的WinUI窗口实例
    var winuiWindow = Application.Windows[0].Handler.PlatformView as Microsoft.UI.Xaml.Window;
    if (winuiWindow == null) return;

    var appWindow = AppWindow.GetFromWindow(winuiWindow);
    if (appWindow == null) return;

    // 1. 完全移除标题栏
    appWindow.TitleBar.IsVisible = false;
    // 如果需要保留系统按钮但隐藏标题栏背景,可设置:
    // appWindow.TitleBar.ExtendsContentIntoTitleBar = true;

    // 2. 固定窗口尺寸为800x400
    appWindow.Resize(new SizeInt32(800, 400));
    // 禁用窗口调整大小功能
    appWindow.Presenter = OverlappedPresenter.CreateForFixedSize();
}

注意:记得添加对应的命名空间引用,这段代码只会在Windows平台生效,不会影响其他平台的运行。

二、关于MAUI与WPF窗口控制差异的疑问

其实这是因为MAUI的底层实现逻辑和WPF不同:

  • WPF是Windows专属框架,直接基于Windows的窗口体系,所以可以在XAML中直接设置Window的各种属性;
  • MAUI是跨平台框架,Windows端底层使用的是WinUI 3而非WPF,为了保持跨平台API的统一性,MAUI没有将所有平台特有的窗口控制暴露到通用XAML中,而是需要通过平台特定代码来实现。

不过正式版MAUI已经完全支持窗口的各种控制(包括尺寸固定、标题栏定制、缩放禁用等),只是需要针对Windows平台单独编写代码,这也是跨平台框架的常见设计思路。

三、标题栏高度不协调的问题

如果是默认标题栏显示异常(高度大于按钮高度),大概率是因为标题栏的布局逻辑和自定义内容冲突。你可以通过自定义标题栏来解决这个问题,让系统按钮和标题栏高度匹配:

  1. 在MainPage.xaml中添加自定义标题栏布局:
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!-- 自定义标题栏区域 -->
    <Grid x:Name="CustomTitleBar" Grid.Row="0" Background="{ThemeResource SystemControlBackgroundAccentBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <!-- 自定义标题内容 -->
        <TextBlock Text="My MAUI App" VerticalAlignment="Center" Margin="12,0"/>
        <!-- 系统按钮容器 -->
        <Grid x:Name="TitleBarButtons" Grid.Column="1"/>
    </Grid>

    <!-- 主内容区域 -->
    <ScrollViewer Grid.Row="1">
        <!-- 你的页面内容 -->
    </ScrollViewer>
</Grid>
  1. 在MainPage.xaml.cs中关联系统按钮到自定义标题栏:
#if WINDOWS
using Microsoft.UI.Xaml;
using Microsoft.UI.Windowing;
#endif

protected override void OnHandlerChanged()
{
    base.OnHandlerChanged();

#if WINDOWS
    var winuiWindow = Application.Windows[0].Handler.PlatformView as Microsoft.UI.Xaml.Window;
    if (winuiWindow == null) return;

    var appWindow = AppWindow.GetFromWindow(winuiWindow);
    if (appWindow == null) return;

    // 开启标题栏内容扩展
    appWindow.TitleBar.ExtendsContentIntoTitleBar = true;
    // 将自定义标题栏设置为窗口标题栏
    winuiWindow.SetTitleBar(CustomTitleBar);

    // 调整系统按钮的垂直位置,使其居中显示
    CustomTitleBar.Loaded += (s, e) =>
    {
        TitleBarButtons.Margin = new Thickness(0, (CustomTitleBar.ActualHeight - 32) / 2, 0, 0);
    };
#endif
}

这样就能让系统按钮和自定义标题栏高度保持一致,解决显示不协调的问题。

内容的提问来源于stack exchange,提问作者Ярослав Донецкий

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:24:06