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

如何配置Grid第0行高度随内部内容自动调整?

解决Grid行高度随InfoBar显示/隐藏自动调整的问题

你的核心问题是Grid第0行未随InfoBar的显示/隐藏自动收缩,虽然已经将RowDefinition.Height设为Auto,但可能是以下几点导致的:

问题排查与修复步骤

  • 确保InfoBar关闭时完全不占空间:
    WinUI的InfoBar默认在IsOpen=false时会将Visibility设为Collapsed(完全移除空间),但如果绑定逻辑或自定义样式改变了这个行为,需要显式绑定Visibility来确保:

    <InfoBar 
        IsOpen="{x:Bind ViewModel.ErrorA}"
        Visibility="{x:Bind ViewModel.ErrorA, Converter={StaticResource BooleanToVisibilityConverter}}"
        ... />
    

    (需在资源中添加BooleanToVisibilityConverter,若没有可手动实现一个简单的布尔值转可见性的转换器)

  • 检查Margin绑定的影响:
    你给InfoBar绑定了Margin属性,如果ErrorAMargin在ErrorA=false时仍保留上下边距,会导致Row0仍占用额外空间。建议在ViewModel中同步调整Margin:当ErrorA为false时,将ErrorAMargin的上下值设为0,或者直接移除Margin绑定,使用默认间距。

  • 替换StackPanel为Grid(可选更可靠方案):
    StackPanel虽能自动调整高度,但Grid的行布局在处理动态显示元素时更稳定。将Row0的容器换成Grid,每个子元素占一行,行高设为Auto:

    <Grid Grid.Row="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <!-- 顶部水平面板 -->
        <StackPanel Grid.Row="0" Orientation="Horizontal" Background="{ThemeResource SystemAccentColorLight3}" Height="60" Padding="3">
            ........
        </StackPanel>
        <!-- ErrorA提示栏 -->
        <InfoBar Grid.Row="1" IsOpen="{x:Bind ViewModel.ErrorA}" Foreground="red" IsIconVisible="True" IsClosable="True" Title="Issue Detected" Content="{x:Bind ViewModel.ErrorAContent}"/>
        <!-- ErrorB提示栏 -->
        <InfoBar Grid.Row="2" IsOpen="{x:Bind ViewModel.ErrorB}" Foreground="red" IsIconVisible="True" IsClosable="True" Title="Issue Detected" Content="{x:Bind ViewModel.ErrorBContent}"/>
    </Grid>
    

最终修改后的完整代码示例

<Grid Margin="{StaticResource NavigationViewPageContentMargin}" CornerRadius="8">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="10"/>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <!-- 替换原StackPanel为Grid,确保每个子元素的高度都能被正确计算 -->
    <Grid Grid.Row="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" Orientation="Horizontal" Background="{ThemeResource SystemAccentColorLight3}" Height="60" Padding="3">
            ........
        </StackPanel>
        <InfoBar 
            Grid.Row="1"
            IsOpen="{x:Bind ViewModel.ErrorA}"
            Visibility="{x:Bind ViewModel.ErrorA, Converter={StaticResource BooleanToVisibilityConverter}}"
            Foreground="red" 
            IsIconVisible="True" 
            IsClosable="True" 
            Title="Issue Detected" 
            Content="{x:Bind ViewModel.ErrorAContent}"/>
        <InfoBar 
            Grid.Row="2"
            IsOpen="{x:Bind ViewModel.ErrorB}"
            Visibility="{x:Bind ViewModel.ErrorB, Converter={StaticResource BooleanToVisibilityConverter}}"
            Foreground="red" 
            IsIconVisible="True" 
            IsClosable="True" 
            Title="Issue Detected" 
            Content="{x:Bind ViewModel.ErrorBContent}"/>
    </Grid>
    <Frame x:Name="NavigationFrame" Grid.Row="2" Background="{ThemeResource SystemAccentColorLight3}" Padding="3" CornerRadius="8"/>
</Grid>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:42