如何将ScrollViewer/ListBox高度固定为屏幕高度?

How to fix the ScrollViewer/ListBox height to be the screen height?

我有一个通用 Windows 平台应用程序。 我有一个 ScrollViewer,它的顶部有一个按钮,一个 ListBox 和一个位于 ListBox 下方的按钮(我知道在 ScrollViewer 中有一个 ListBox 不是一个好习惯,但这不是我的代码,我无法修改执行)。 ScrollViewer的VerticalScrollMode和VerticalScrollBarVisibility都设置为false,所以不能垂直滚动(这也是一个要求)。

当ListBox包含很多项时,列表的高度会变得比设备高度大。因此列表框的一部分和列表下方的按钮不可用(因为垂直滚动被禁用)。

<ScrollViewer>
  <RelativeLayout>
    ...
    <Button name="Button1">
    ...
    </Button>
    <ListBox MinHeight="120">
    </ListBox>
    <Button name="Button2">
    ...
    </Button>
  </RelativeLayout>
</ScrollViewer>

有没有办法将ScrollViewer的高度固定为设备屏幕高度?并固定 ListBox 的高度,使 ListBox 的高度仅增长,以便 ListBox 适合 Button1 和 Button2 之间的 space?

您的问题不是滚动查看器的高度。它是扩展以容纳其内容的列表框(它应该如此)。通过限制列表框的高度,您可以解决这个问题。

您可以使用 3 行的网格。像这样

<Grid>
   <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="*"/>
       <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Button x:Name="ButtonTop" Grid.Row=0/>
   <ListView x:Name="DontPutListViewInScrollViewer" Grid.Row=1/>
   <Button x:Name="ButtonBottom" Grid.Row=2/>
</Grid>

注意中间一行定义的高度。这意味着列表视图将占用顶部和底部行留下的所有 space。

然后把这个网格放到ScrollViewer中。