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

XAML中Grid宽度不足时如何指定优先收缩的列

解决方案

你不需要手动计算各列宽度,修改列宽的配置逻辑即可实现需求,修改后的XAML代码如下:

<Grid MaxWidth="150" HorizontalAlignment="Left">
    <Grid.ColumnDefinitions>
        <!-- 可换行内容所在列设为*,分配Auto列占用后剩余的可用宽度 -->
        <ColumnDefinition Width="1*" />
        <!-- 不可换行内容所在列保留Auto,优先占用自身实际需要的宽度,不会被压缩 -->
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Grid.Column="0" Text="I'm long but I wrap" TextWrapping="Wrap" Background="LightGreen"  />
    <TextBlock Grid.Column="1" Text="I'm a long single line" TextWrapping="NoWrap" Background="LightSteelBlue" />      
</Grid>

实现逻辑说明

  • 布局计算时Grid会优先计算所有Auto列的实际宽度,不可换行的内容会完整展示,不会被压缩
  • 剩余的可用宽度会分配给设置为*的列,列内的换行文本会自动适配宽度触发折行
  • 因为Grid设置了HorizontalAlignment="Left",当所有列的内容总宽度小于MaxWidth时,Grid会自动收缩到刚好包裹内容的尺寸,不会占用多余空白,完全满足你不希望额外占空间的要求
    如果存在多个可换行列,只需要给对应列都设置*宽度,即可按比例分配剩余可用宽度,不需要额外写后台逻辑计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:03