ScrollViewer 在没有固定高度的情况下不显示滚动距离

ScrollViewer not showing scroll far without fixed height

我有以下XAML。我似乎无法解决的问题是,我有一个滚动查看器,它环绕着一个充满视图(具有固定高度)的网格,但无法让滚动条在超过 window 大小的内容上滚动。

我希望用户控件填满 window 的全部高度,但当网格控件长度的数量大于 window 大小时也可以滚动。但是,如果我不手动设置滚动查看器的高度,那么我将永远无法获得可滚动的滚动条(在示例中手动设置)。

我查看了网站上的其他示例,但找不到有效答案(包括这个 link)。

XAML:

<UserControl d:DesignWidth="300" d:DataContext="{d:DesignInstance ViewModels:EntityViewModel}">
    <StackPanel>
        <Label Content=“text” />
        <ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
            <Grid>
                <ItemsControl ItemsSource="{Binding Entities}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <local:EntityView DataContext="{Binding}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </ScrollViewer>
    </StackPanel>
</UserControl>

编辑:
我正在添加一个可以轻松重新创建的附加示例。需要能够使滚动视图与停靠面板(可以是网格)一起滚动,其内容比插入用户控件的屏幕所能容纳的内容更多(这意味着我无法固定滚动查看器上的大小)。

<Window Title="MainWindow" Height="200" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>


        <StackPanel Grid.Column="0">
            <Label Content="title"/>
            <ScrollViewer>
                <DockPanel>
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                </DockPanel>
            </ScrollViewer>
        </StackPanel>
    </Grid>
</Window>

尝试在 StackPanel

上设置 ScrollViewer
<ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
    <StackPanel>
        <Grid>
            <ItemsControl ItemsSource="{Binding Entities}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <local:EntityView DataContext="{Binding}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>
    </StackPanel>
</ScrollViewer>

具有垂直方向的 StackPanel 不限制其子元素的高度。换句话说,Scrollviewer 将始终与显示其全部内容所需的一样高,除非您明确设置其高度。

您必须选择其他面板,例如网格或 DockPanel:

<UserControl ...>
    <DockPanel>
        <Label DockPanel.Dock="Top" Content="text"/>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <ItemsControl ItemsSource="{Binding Entities}">
                ...
            </ItemsControl>
        </ScrollViewer>
    </DockPanel>
</UserControl>