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

升级VS2022 17.6后.NET MAUI Grid布局异常求助

.NET MAUI Grid在VS2022 17.6版本布局异常问题分析与解决

问题情况

用.NET MAUI的Grid做界面布局,VS2022 17.6版本之前一切正常,升级后所有Grid宽度直接超出屏幕,导致其他控件错位。像示例里的代码,原本是把屏幕按25%、50%、25%分成三列,结果17.6版本里Grid撑出屏幕,中间列也没法居中了。

示例代码:

<Grid RowDefinitions="*" ColumnDefinitions="25*,50*,25*">
    <Label 
        Grid.Row="0"
        Grid.Column="0"
        Grid.ColumnSpan="3"
        Text="Welcome to .NET MAUI!"
        VerticalOptions="Center" 
        HorizontalOptions="Center" />
</Grid>

关联的官方修复项

微软开发者博客提到17.6版本的两项Bug修复:

  • 将*/Auto跨度视为可解析的有限度量而非无限(Issue #14667)
  • [net7.0] 确保Grid在无约束时将星号行/列视为Auto(Issue #14165)

问题根源

这是17.6版本修复后的预期行为。之前版本里,即使Grid没有明确的宽度约束,星号列也会按比例分配父容器的宽度;但修复后,当Grid没有被父容器限制宽度(比如没设置WidthRequest、父容器也没约束它的宽度),星号列会被当作Auto处理,Grid宽度直接由内容撑开,自然就超出屏幕了。你的示例代码里Grid没加任何宽度约束,刚好触发了这个新逻辑。

解决办法

给你几个可行的修复方案:

  1. 给Grid绑定父容器的宽度,强制它和屏幕同宽:
<Grid RowDefinitions="*" ColumnDefinitions="25*,50*,25*" 
      WidthRequest="{Binding Source={RelativeSource AncestorType={x:Type Page}}, Path=Width}">
    <Label 
        Grid.Row="0"
        Grid.Column="0"
        Grid.ColumnSpan="3"
        Text="Welcome to .NET MAUI!"
        VerticalOptions="Center" 
        HorizontalOptions="Center" />
</Grid>
  1. 给Grid设置HorizontalOptions="Fill",让它自动填充父容器的宽度:
<Grid RowDefinitions="*" ColumnDefinitions="25*,50*,25*" HorizontalOptions="Fill">
    <Label 
        Grid.Row="0"
        Grid.Column="0"
        Grid.ColumnSpan="3"
        Text="Welcome to .NET MAUI!"
        VerticalOptions="Center" 
        HorizontalOptions="Center" />
</Grid>
  1. 检查Grid的父容器,如果是StackLayout这类布局控件,把父容器的HorizontalOptions也设为Fill,让父容器先占满屏幕宽度,间接约束Grid的宽度。

如果暂时不想改代码,回滚到VS2022 17.5.2版本也能解决问题。

内容的提问来源于stack exchange,提问作者sheldon.parkes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:43:00