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

问题描述 投票:1回答:2

我有以下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>
c# wpf scrollviewer
2个回答
2
投票

具有垂直方向的StackPanel不限制其子元素的高度。换句话说,除非您明确设置其高度,否则Scrollviewer将始终保持显示其整个内容所需的最高值。

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

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

0
投票

尝试设置ScrollVieweron 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>
© www.soinside.com 2019 - 2024. All rights reserved.