如何使WPF ListView不高于其内容但适合窗口与其他控件?

El *_*rko 14 wpf listview docking wpf-controls autoresize

我正在尝试按如下方式安排WPF UI:

小样

  1. 在窗口的顶部是一些自我确定高度的控件(有效地停靠在窗口的顶部,但是他们想要的高度).
  2. 这些控件下面是ListView.ListView可能包含可变数量的项目,每个项目的高度各不相同.问题: ListView不能高于它需要的高度.如果列表视图中的所有项目都很容易适合窗口,我希望ListView 正好是显示其所有项目的高度(因此窗口看起来像一个网页的流动布局,底部有空白).另一方面,如果所有ListView项目都不适合窗口,我希望整个UI适合窗口(好像下面的数字3停靠在窗口的底部,并且ListView填充了可用空间) .当用户调整窗口大小和/或按下改变列表视图内容的按钮时,这一切都必须动态调整.
  3. 在ListView下面是一些自我确定高度的控件.这些必须始终直接出现在ListView下,没有间隙.特别是如果它们直接适合ListView,它们不能仅停靠在窗口的底部.

解决方案将非常受欢迎; 我已经摆弄了一段时间并且设法让事情工作除了 ListView下面的控件,通过在窗口中使用外部DockPanel,第一个控件停靠在顶部,ListView填充剩余空间但设置为VerticalAlignment ="最佳".

一个纯粹的XAML解决方案是理想的,但如果它不可避免,我不介意代码背后.一个解决方案的奖励点,允许多个这样的安排垂直堆叠:)感谢您的帮助!

Ela*_*atz 16

尝试

<Grid VerticalAlignment="Top">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />

    </Grid.RowDefinitions>

    <Button Content="hello" />
    <ScrollViewer Grid.Row="1" >
    <ListView >
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <!-- Some Items -->
    </ListView>
    </ScrollViewer>
    <Button Content="hello" Grid.Row="2" />

</Grid>
Run Code Online (Sandbox Code Playgroud)

  • 很简单!正是我想要的.网格上的VerticalAlignment ="Top"似乎是关键,对我来说真的没有发生,但完全有道理.(编辑:我不需要ScrollViewer,如果需要,ListView会自动滚动,无论如何都能很好地适应.)非常感谢. (2认同)