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

XAML Grid布局中如何禁止特定单元格调整所在行高度?

解决XAML Grid中ListBox滚动与行高自适应的问题

你的问题根源在于:当Grid的行高设为Auto时,该行的高度会由单元格内最高的控件决定。右上角的ListBox在内容增加时会自动扩展自身高度,导致整行被拉长,而它的滚动条因为没有高度限制,自然不会激活。我们需要让行高仅由左上角GroupBox的内容决定,同时限制右上角ListBox的高度,让它在固定行高内滚动。

具体解决方案

修改你的XAML代码,通过绑定限制ListBox的最大高度,使其等于所在行的实际高度(由左上角GroupBox决定),同时确保ListBox的滚动功能正常启用:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!-- 左上角GroupBox:自动调整行高 -->
    <GroupBox x:Name="TopLeftGroupBox" Header="左侧分组"/>

    <!-- 右上角ListBox:绑定最大高度到行实际高度,超出内容滚动 -->
    <ListBox x:Name="TopRightListBox" 
             Grid.Column="1"
             ScrollViewer.VerticalScrollBarVisibility="Auto"
             VerticalAlignment="Stretch"
             MaxHeight="{Binding RelativeSource={RelativeSource AncestorType=Grid}, Path=RowDefinitions[0].ActualHeight}"/>

    <!-- 底部跨列GroupBox -->
    <GroupBox x:Name="BottomGroupBox" 
              Grid.Row="1" 
              Grid.ColumnSpan="2"
              Header="底部分组"/>
</Grid>

关键说明

  1. 行高控制:保持第0行的Height="auto",这样行高会完全适应左上角GroupBox的内容高度,不会被ListBox影响。
  2. ListBox高度限制:通过MaxHeight绑定到Grid第0行的ActualHeight,确保ListBox的最大高度不会超过当前行的高度。
  3. 滚动条激活:设置ScrollViewer.VerticalScrollBarVisibility="Auto"(或Visible),当ListBox内容超过最大高度时,滚动条自动启用。
  4. 垂直拉伸:VerticalAlignment="Stretch"让ListBox填满单元格的可用高度,避免出现空白区域。

如果你的ListBox使用了自定义的ItemsPanel,请确保它支持垂直滚动(比如默认的VirtualizingStackPanel,不要设置Orientation="Horizontal"),否则滚动功能可能无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:33:15