WinRT中的GridView方向和换行

9

我正在使用C#开发WinRT应用程序,使用GridView来呈现我的项目。

我希望我的项目横向排列,并在达到最大宽度时将下一个项目添加到新行中(简单地说:只有垂直滚动条可见)。

不幸的是,我的当前XAML只能在一行水平方向上添加项目(带有水平滚动条)。

<GridView x:Name="GridChildItem" 
                  ItemContainerStyle="{StaticResource NonTickGridViewItem}" 
                  VerticalContentAlignment="Stretch" 
                  ItemTemplate="{StaticResource CustomChildItemTemplete}"
                  SelectionMode="Single" 
                  IsItemClickEnabled="True" 
                  ItemClick="gridViewChild_ItemClick_1"
                  Margin="0,40,0,0" 
                  Height="Auto"
                  Background="{StaticResource DropDownMenuBackColor}" 
                  ScrollViewer.IsHorizontalScrollChainingEnabled="False"
                  ScrollViewer.IsVerticalScrollChainingEnabled ="True"
                  VerticalAlignment="Top">
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" Margin="20,0,0,0" />
                </ItemsPanelTemplate>

           </GridView.ItemsPanel>
 </GridView>

你尝试过使用 WrapGrid 作为 ItemsPanelTemplate 吗?例如: <GridView.ItemsPanel> <ItemsPanelTemplate> <WrapGrid Orientation="Horizontal" Margin="20,0,0,0" /> </ItemsPanelTemplate> </GridView.ItemsPanel>? - nemesv
@nemesv。是的,但没有成功。 - VibeeshanRC
1
我手头没有Win8,但您也可以尝试使用ListView代替带有WrapGridGridView作为ItemsPanelTemplate... - nemesv
@nemesv,谢谢,它在listview和WrapGrid中运行良好。 - VibeeshanRC
2个回答

17
如果您不想允许水平滚动,则需要使用 ListView 代替 GridViewMSDN 上写道:
使用 ListView 显示可垂直滚动的数据集。要显示可横向滚动的数据集,请使用 GridView
但如果您希望保持换行行为,则需要将 ItemsPanel 设置为 WrapGrid
<ListView>
     <ListView.ItemsPanel>
          <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" />
           </ItemsPanelTemplate>
     </ListView.ItemsPanel>
</ListView>

@vibeeshanRC 是的,我没有使用VS或Win8就完成了它,你想知道什么? - nemesv
没有内容,我只是在赞美你。 - VibeeshanRC

10

GridView 的默认 ItemsPanelTemplate 包含一个 Orientation="Vertical" 的 WrapGrid:它垂直堆叠并水平滚动。

如果将 Orientation 更改为 Horizontal,则会水平堆叠,但由于某种原因无法滚动。您可以通过在 GridView(而不是 WrapGrid)上设置 ScrollViewer.VerticalScrollMode="Enabled" 来解决这个问题。

示例:

<GridView ScrollViewer.VerticalScrollMode="Enabled">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

这个不起作用。它只是允许网格视图在用户滑动时上下弹跳。 - swinefeaster
1
也许我没有完全跟上这个线程,但对于我来说,VS2013 win store应用程序只需更改WrapGrid的Orientation="Horizontal"就可以解决问题! - MemeDeveloper
1
我正在Win 8.1下进行测试,我还需要启用GridView的滚动条可见性:ScrollViewer.VerticalScrollBarVisibility="Auto" 不过这可能只是特定于我的设置。 - chue x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接