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

Grid高度为Auto时ListView滚动视图不显示的问题解决建议

问题分析与解决方案

首先咱们拆解下你遇到的两个核心问题:

  1. ListView无法滚动:你把ListView放在了Height="auto"的Grid行中,当内容过多时,这个行会被内容完全撑开,ListView的实际高度等于所有项的总高度——既然能完全显示所有内容,ScrollViewer自然不会触发滚动。
  2. DataTemplate语法错误:你的DataTemplate里直接放了两个StackPanel,没有根容器,这会导致XAML编译失败,得先修复这个基础问题。

修正步骤

1. 修复DataTemplate的语法问题

DataTemplate必须有且仅有一个根元素,把你的ItemTemplate改成下面这样(用Grid布局两个TextBlock更合理):

<ListView.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding SerialNum}" TextAlignment="Left" FontSize="20" Grid.Column="0"/>
            <TextBlock Text="{Binding Name}" FontSize="20" TextAlignment="Center" Grid.Column="1"/>
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

2. 解决ListView滚动失效问题

最简洁的方案是调整Grid行的高度分配逻辑,让ListView所在的行占据除了底部Border之外的所有可用空间,而不是随内容自动撑开:
把你的Grid.RowDefinitions修改为:

<Grid.RowDefinitions>
    <RowDefinition Height="*"/> <!-- 让该行占据剩余所有可用空间 -->
    <RowDefinition Height="auto"/> <!-- 底部Border仅占用自身内容高度 -->
</Grid.RowDefinitions>

这样调整后:

  • 当底部Border处于Collapsed状态时,ListView会自动占满整个屏幕,内容超过屏幕高度时,ScrollViewer会正常触发滚动。
  • 当Border显示时,ListView会自动缩小,给Border留出足够的显示空间,同时自身仍保持可滚动的特性。

完整修正后的代码

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>
        <ListView x:Name="ItemListView" Grid.Row="0" 
                  ScrollViewer.VerticalScrollBarVisibility="Auto" 
                  Width="Auto" HorizontalAlignment="Stretch">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding SerialNum}" TextAlignment="Left" FontSize="20" Grid.Column="0"/>
                        <TextBlock Text="{Binding Name}" FontSize="20" TextAlignment="Center" Grid.Column="1"/>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <Border Background="Green" x:Name="Bg" Grid.Row="1" Tapped="Bg_TappedAsync" Visibility="Collapsed">
            <TextBlock x:Uid="txt_string" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Border>
    </Grid>
</Grid>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:52