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

如何让DockPanel内的Grid填充全部空间,支持折叠自适应?

WPF 自适应空间填充布局实现方案

原有实现及问题

现有布局代码如下:

<Grid Margin="2.0cm, 2.0cm, 1.5cm, 0.5cm" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
    <DockPanel VerticalAlignment="Stretch" Grid.Row="1" Background="Red">
        <Grid Height="100" DockPanel.Dock="Top" Background="Blue"/>
        <Grid Height="100" DockPanel.Dock="Bottom" Background="Yellow"/>
    </DockPanel>
</Grid>

该实现运行后,蓝色和黄色Grid各占固定100高度,中间会露出红色的DockPanel背景,不符合预期。

需求说明

  • 蓝色Grid填充黄色Grid上方的所有剩余空间,黄色Grid固定停靠在底部,完全不露出DockPanel的红色背景
  • 当黄色Grid设置为Collapsed隐藏状态时,蓝色Grid可以自动填充满整个父容器的可用空间
  • 此前尝试直接设置VerticalAlignment="Stretch"未达到预期效果,甚至出现Grid无法显示的问题

解决方案

采用Grid行定义的自适应高度规则实现需求,代码如下:

<Grid Margin="2.0cm, 2.0cm, 1.5cm, 0.5cm" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
    <Grid.RowDefinitions>
        <!-- 第一行占满所有剩余空间 -->
        <RowDefinition Height="*"/>
        <!-- 第二行高度自适应内容高度 -->
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <!-- 上方蓝色区域,占满第一行所有空间 -->
    <Grid Background="Blue" Grid.Row="0" VerticalAlignment="Stretch"/>
    <!-- 底部黄色区域,固定100高度,隐藏时第二行高度自动归零,上方蓝色区域自动扩展 -->
    <Grid Background="Yellow" Grid.Row="1" Height="100" Visibility="Visible"/>
</Grid>

注:原示例解决方案代码中蓝黄区域的行索引写反,已按照需求逻辑调整为正确顺序


内容的提问来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:39:03