升级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没加任何宽度约束,刚好触发了这个新逻辑。
解决办法
给你几个可行的修复方案:
- 给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>
- 给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>
- 检查Grid的父容器,如果是StackLayout这类布局控件,把父容器的
HorizontalOptions也设为Fill,让父容器先占满屏幕宽度,间接约束Grid的宽度。
如果暂时不想改代码,回滚到VS2022 17.5.2版本也能解决问题。
内容的提问来源于stack exchange,提问作者sheldon.parkes
相关产品推荐
相关产品推荐

