【问题标题】:ScrollViewer not showing scroll far without fixed heightScrollViewer 在没有固定高度的情况下不显示滚动远
【发布时间】:2018-09-01 19:07:01
【问题描述】:

我有以下 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>

【问题讨论】:

  • 除了Grid还有其他UI控件吗?
  • 是的,WPF 控件,它需要是一个格式化列表,内容是一个视图并且可以滚动。
  • StackPanel 的用途是什么?删除它。
  • 这里有一个支持标签,我删除了发布示例的标签,因为它不相关并且我不想分散注意力。
  • 无论有没有,这个问题仍然适用。你只是挑剔。

标签: c# wpf scrollviewer


【解决方案1】:

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

您必须选择不同的面板,例如Grid 或 DockPanel:

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

【讨论】:

  • 嗨 Clemens,在实现了这个家伙之后,我完全没有垂直滚动条,内容从屏幕上消失了。
  • example gif i.imgur.com/hTYc62g.gifv(每列渲染 100 个项目)
  • @StephenMiller 我尝试了答案,它工作正常。你的代码里还有什么?
  • 我在这个问题上发布了一个编辑,只是在主窗口中,同样的问题。
  • @StephenMiller 在另一个示例中再次有一个 StackPanel。正如已经多次说过的,它不适用于 StackPanel。停止使用它!
【解决方案2】:

尝试设置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>

【讨论】:

  • 嗨,如链接答案中所述,堆栈面板的高度是无限的,这意味着它们永远无法滚动。
  • 您只希望Grid 可滚动?
  • 您好,我需要网格中的内容在超出窗口高度时可以滚动,无需设置设置高度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2019-04-27
  • 2013-09-13
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多