如何在不指定静态高度或宽度的情况下使ScrollViewer工作?

时间:2019-06-18 00:24:15

标签: c# .net wpf xaml

我目前正在使用WPF应用程序的UI,我想使用ScrollViewer来显示可能超出屏幕查看范围的内容。

在过去的两天里,根据我的理解,我已经在互联网上阅读了所有内容:除非静态确定,否则ScrollViewer并不知道内容/父母的身高。因此,如果没有写下特定的高度(例如,在其下面的StackPanel中),则不允许滚动。

现在,让我们假设我的UI层次结构如下:

<Window> <!--No height here-->
    <Grid>
        <StackPanel Orientation="Horizontal"/>
        <ContentControl>
            <UserControl> <!--This user control doesn't have a specific height or width-->
                <Grid>
                    <ScrollViewer>
                        <Grid /> <!--This grid doesn't contain any StackPanels, or containers with dynamic height, and this is content I want to show-->
                    </ScrollViewer>
                    <Grid />
                </Grid>
            </UserControl>
        </ContentControl>
    </Grid>
</Window>

我希望ScrollViewer能够正确滚动,因为它下面没有动态容器,但实际上并没有,因此,似乎为其设置了静态高度或在其上方的UserControl上设置了静态高度即可。

但是由于该应用程序可以在不同的屏幕尺寸上运行,并且所有窗口都可以调整大小,所以我不想编写静态尺寸。

1 个答案:

答案 0 :(得分:0)

解决方案是对网格使用小数大小(以某种方式提供scrollviewer的高度),例如:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="Auto" /> <!--this gives the second row the space it needs and leaves the scrollviewer with all the remaining space, this will also work if you need to make the second row child fixed-->
  </Grid.RowDefinitions>
  <ScrollViewer Grid.Row="0"/>
  <Grid Grid.Row="1"/>
</Grid>

要获得更好的网格体验,请使用WpfAutoGrid。