ScrollViewer没有显示滚动没有固定高度

时间:2018-09-01 19:07:01

标签: c# wpf scrollviewer

我有以下XAML。我似乎无法解决的问题是,我有一个滚动查看器,该滚动查看器环绕着充满视图(具有固定高度)的网格,但是无法使滚动条滚动的内容长于窗口大小。

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

我看过网站上的其他示例,但找不到有效答案(包括此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>

2 个答案:

答案 0 :(得分:2)

具有垂直方向的StackPanel不会限制其子元素的高度。换句话说,除非您显式设置其高度,否则Scrollviewer始终会高到需要显示其全部内容。

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

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

答案 1 :(得分:0)

尝试在ScrollViewer上设置StackPanel

<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>