使用水平StackPanel作为ItemsPanel时在ItemsControl中滚动

本文关键字:时在 ItemsControl 滚动 ItemsPanel 作为 水平 StackPanel | 更新日期: 2023-09-27 18:26:52

我有一个ItemsControl,我构建了我在其中显示的项目(views:DisplayGroupView),它们将水平展开以显示所有内容,而不是垂直(仅使用可用高度)

我已将ItemsControlItemsPanel更改为使用带有Orientation="Horizontal"StackPanel

就布局而言,它是完美的,但无论我做什么,我都无法让它水平滚动,这样我就能看到一切。

这是ItemsControl:的XAML

    <ItemsControl ItemsSource="{Binding DisplayGroups}" Grid.Row="1" Margin="120,20,120,20" VerticalContentAlignment="Stretch">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate >
                <StackPanel Orientation="Horizontal" ScrollViewer.HorizontalScrollMode="Enabled" ScrollViewer.HorizontalScrollBarVisibility="Visible"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <views:DisplayGroupView Margin="0,0,20,0" DataContext="{Binding}" VerticalAlignment="Stretch"></views:DisplayGroupView>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

这会将所有内容都布置好,但不会滚动。我还尝试过更改ItemsControls模板以包含滚动查看器,但这只会垂直堆叠:

            <ItemsControl.Template>
                <ControlTemplate>
                    <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch" ScrollViewer.HorizontalScrollMode="Enabled" ScrollViewer.VerticalScrollMode="Disabled">
                        <ItemsPresenter VerticalAlignment="Stretch"/>
                    </ScrollViewer>
                </ControlTemplate>
            </ItemsControl.Template>

如何在仍然可以滚动的情况下获得水平布局?

使用水平StackPanel作为ItemsPanel时在ItemsControl中滚动

如果您将其从ItemsControl中取出并单独嵌入,出于某种原因,这通常是一种变通方法,比如;

<ScrollViewer VerticalScrollBarVisibilty="Disabled" HorizontalScrollBarVisibility="Auto">
  <ItemsControl/>
</ScrollViewer>