c# - GridView 可以在没有包装 ScrollViewer 的情况下垂直滚动吗?

标签 c# xaml windows-8

我有一个 GridView,它绑定(bind)到我的 C# 中的数据源,它会在用户水平滚动时加载更多数据:

来自 GridView.xaml:

<GridView Grid.Row="1" x:Name="GridViewStories" ItemsPanel="{StaticResource GridViewVerticalTemplate}" IsSwipeEnabled="False" SelectionMode="None" IsItemClickEnabled="True" ItemClick="GridViewStories_ItemClick" IncrementalLoadingTrigger="Edge">
    <GridView.ItemContainerTransitions>
        <TransitionCollection />
    </GridView.ItemContainerTransitions>
    <GridView.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding SquareImageURL}" Margin="10" Width="240" Height="160" />
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

我希望它在快照 View 中表现得像 ListView,这意味着它应该垂直滚动而不是水平滚动。除了这个问题,我已经能够通过 VisualStateManager 更改我需要的一切:

来自 GridView.xaml:

<VisualState x:Name="Snapped">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeader" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeaderSnapped" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="StackPanelHeaderPortrait" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="GridViewStories" Storyboard.TargetProperty="ItemsPanel">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource GridViewHorizontalTemplate}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

来自 StandardStyles.xaml:

<ItemsPanelTemplate x:Key="GridViewHorizontalTemplate">
    <WrapGrid Orientation="Horizontal" HorizontalAlignment="Center" MaximumRowsOrColumns="1" />
</ItemsPanelTemplate>

我不想将 GridView 包装在 Scrollviewer 中,因为这样做会破坏我正在使用的内置增量加载。我意识到我可以只创建一个 ListView 并切换它和 GridView 的可见性,但我宁愿不必绑定(bind)到额外的控件并复制其他相关代码。想法?

最佳答案

尝试将以下内容添加到您的 GridView:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
</GridView.ItemsPanel>

关于c# - GridView 可以在没有包装 ScrollViewer 的情况下垂直滚动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895436/

相关文章:

c# - 如何从模板重置文本框的属性文本?仅在xaml中

c# - 具有 AutoScroll 性能的虚拟化 ListView(慢)

c# - Windows 7/8、Direct3D9、10 和 11 - 效果/着色器

java - 地址在本地计算机上无效 [仅限 Windows 8]

c# - EWS 附加电子邮件在 .Load() 之后缺少 DatatimeReceived 属性

c# - CheckedListBox 设置ItemCheckState

c# - 获取两个数据行中的键值对差异?

c# - 在 UWP 应用程序中合并 ResourceDictionary 初始化

c# - 是否有任何 T4 模板或自定义工具可以从 .resw 文件生成类?

c# - 将字典中的所有键转换为大写