如果高度设置为自动,WPF ListView 没有滚动条

Posted

技术标签:

【中文标题】如果高度设置为自动,WPF ListView 没有滚动条【英文标题】:WPF ListView no scrollbar if height set to auto 【发布时间】:2011-09-07 11:40:54 【问题描述】:

您好,我有一个绑定到集合的 ListView。我将 ListView 的高度设置为 auto 以占用该区域中的所有空间。但是,我将高度设置为自动后没有滚动条。如果我给它一个高度,那么滚动条就会出现。

标记和下面的差不多

<Grid>
   <StackPanel>
      <Expander>
          <DataGrid>
      <Expander>
          <ListView>

【问题讨论】:

我有一种预感,“有什么想法吗?”这不是您的实际问题。 里面的ListView是什么容器/面板? 【参考方案1】:

如果没有可滚动的内容,为什么要显示滚动条?

如果您想覆盖任何默认行为,您可以在 ListBox 上设置 ScrollViewer.VerticalScrollBarVisibility="Visible"

【讨论】:

【参考方案2】:

我有一种预感,您的ListView 位于一个面板内,允许它无限地垂直扩展。

例如,如果您将ListView 放在StackPanel 中,则ListView 的高度可能会超过StackPanel 的高度。 ListView 增加了高度以显示其所有项目,就它而言,因此没有滚动条。

但是,如果您将 StackPanel 更改为 Grid,其中控件会自动尝试将自己放入该区域,当 ListView 包含的项目超出其显示范围时,它将自动具有滚动条。

这很可能通过调整包含ListView 的布局来解决。

【讨论】:

这正是我所拥有的。使用标记示例更新了帖子。 我会问:StackPanel 中只有 2 个 Expanders 吗? StackPanelGrid 中唯一的东西吗?您是否希望ListView 只占用外部Grid 中可用的空间?如果所有这些都是,您可以使用DockPanel 而不是StackPanel。如果ExpanderListView 是最后一个孩子,它将填充剩余区域。 很好的解释乔尔。帮助我解决了在 StackPanel 中放置 ListView 的类似问题。【参考方案3】:

而不是设置

<RowDefinition Height="auto"/>

设置:

<RowDefinition Height="1*"/>

【讨论】:

嗯,您的意思是指Grid 的一个或多个Row 上的Height 属性吗? AFAIK,在所有提到的元素中,GridRow 是唯一的 Height 属性接受“*”符号的元素。

以上是关于如果高度设置为自动,WPF ListView 没有滚动条的主要内容,如果未能解决你的问题,请参考以下文章

WPF:将宽度(和高度)设置为百分比值

设置“自动”时获取 WPF 控件高度

WPF:将控件高度设置为填充网格行高

wpf 动态添加滚动条

android如何改变listview的每行高度

WPF ListView SelectedItem 为空