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

WPF ListView行仅含折叠元素时如何将行高收缩为0

解决方案

根因说明

你之前仅对单元格内的TextBlock设置了Collapsed状态,但作为行容器的ListViewItem本身存在默认的布局属性(最小高度、上下内边距等),即使内部内容完全折叠,容器本身仍会占用高度,从而产生多余空白。

具体修改位置

你只需要在ListView.ItemContainerStyle中添加对应的数据触发器,直接控制行容器本身的可见性即可,你代码中注释标注的解决部分已经是正确的实现方案:

  1. 利用你ViewModel中已经存在的IsVisible属性做绑定触发条件
  2. 当IsVisible为False时,直接把整个ListViewItem的Visibility设为Collapsed,此时整个行容器会完全收缩,不占用任何布局空间,自然就不会出现空白间隔。

完整生效的XAML关键代码段

<ListView FontFamily="Consolas" Margin="3,19,3,0" ItemsSource="{Binding MyEntryList}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <!-- 核心修改:直接控制行容器的可见性 -->
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsVisible}" Value="False">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
            <Setter Property="VerticalContentAlignment" Value="Top" />
        </Style>
    </ListView.ItemContainerStyle>
    <!-- 其余GridView相关代码保持不变即可 -->
</ListView>

额外适配方案

如果修改后仍有极少量间隔,可以额外在ListViewItem的样式中添加两个Setter消除默认边距即可:

<Setter Property="Padding" Value="0"/>
<Setter Property="MinHeight" Value="0"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:57:03