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

Xamarin:向Grid动态添加行时StackLayout尺寸不增长问题

问题产生原因

你遇到的布局问题是由错误的VerticalOptions属性配置导致的:

  • ScrollView的核心逻辑是根据内部子元素的实际内容高度决定可滚动范围,你给ScrollView的直接子元素StackLayout设置了VerticalOptions="FillAndExpand",会强制StackLayout的高度被限制为ScrollView的可视区域高度,不会随内部内容增长自动撑开。
  • StackLayout内部的Grid同样设置了VerticalOptions="FillAndExpand",会强制Grid的高度被限制为StackLayout分配的固定剩余高度,动态添加行时Grid的高度不会自动增长,就会出现内容溢出、外层布局不跟随变化的问题。
正确实现方式

只需要修改XAML中两个控件的VerticalOptions配置即可,不需要修改C#逻辑:

  1. 将MainStack的VerticalOptions从FillAndExpand改为Start(也可以直接删除该属性,StackLayout默认的垂直布局行为就是Start),让StackLayout可以根据内部子控件的总高度自动调整自身尺寸。
  2. 将myGrid的VerticalOptions从FillAndExpand改为Start(也可以直接删除该属性),让Grid动态添加行时可以自动撑开高度。

修改后的核心XAML片段如下:

<ScrollView x:Name="myScrollView" BackgroundColor="LightBlue" VerticalOptions="FillAndExpand">
  <!-- 移除FillAndExpand,改为Start或直接省略该属性 -->
  <StackLayout x:Name="MainStack" BackgroundColor="YellowGreen" VerticalOptions="Start">
      <Label Text="Start of StackLayout"></Label>
      <Button Text="Populate Grid" Clicked="Button_Clicked" x:Name="btnFill" BackgroundColor="Black" TextColor="White"></Button>
      <!-- 移除FillAndExpand,改为Start或直接省略该属性 -->
      <Grid x:Name="myGrid" BackgroundColor="Yellow" VerticalOptions="Start"></Grid>
      <Label Text="Bottom of StackLayout"></Label>
  </StackLayout>
</ScrollView>

修改后运行点击按钮,Grid高度会随新增行自动增长,外层StackLayout也会同步调整高度,ScrollView可正常滚动显示全部内容。

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:39:03