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

25

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

标记基本上像以下这样:

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

我有一种预感,“有什么想法吗?”不是你实际想问的问题。 - BoltClock
ListView 位于哪种容器/面板中? - Joel B Fant
3个回答

65

我有一种直觉,你的 ListView 位于一个允许它无限制垂直扩展的面板内。

例如,如果你将 ListView 放在 StackPanel 中,ListView 的高度可能会超过 StackPanel 的高度。对于 ListView 来说,它已经增加了自己的高度以显示所有项目,因此没有滚动条。

然而,如果你将 StackPanel 更改为 Grid,其中控件会自动尝试适应该区域内,当 ListView 包含的项目超过其所能显示的项目时,ListView 将自动拥有滚动条。

这可能最简单地通过调整包含 ListView 的布局来解决。


这正是我拥有的内容。已经使用标记示例更新了帖子。 - Eatdoku
我想问一下:StackPanel 中只有 2 个 Expanders 吗?StackPanelGrid 中唯一的元素吗?你希望 ListView 只占用外部 Grid 中可用的空间吗?如果所有这些都是“是”,那么你可以使用 DockPanel 替代 StackPanel。如果带有 ListViewExpander 是最后一个子元素,则它将填充剩余区域。 - Joel B Fant
很好的解释,Joel。帮助我解决了一个类似的问题,我在 StackPanel 中放置了一个 ListView。 - Eddie

10

不要设置

<RowDefinition Height="auto"/>

设置:

<RowDefinition Height="1*"/>

您是不是想引用Grid的一个或多个*RowHeight属性?据我所知,在提到的所有元素中,GridRow是唯一接受“”符号表示法的元素。 - Tom

4

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接