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>
4

2 回答 2

17

如果您不想允许水平滚动,您需要使用ListView而不是GridView,

来自 MSDN:

使用ListView显示垂直滚动的数据集合。要显示水平滚动的集合,请使用 GridView

但是如果你想保持包装行为,你需要使用WrapGrid作为ItemsPanel

<ListView>
     <ListView.ItemsPanel>
          <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" />
           </ItemsPanelTemplate>
     </ListView.ItemsPanel>
</ListView>
于 2012-11-02T10:36:24.153 回答
10

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

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

例子:

<GridView ScrollViewer.VerticalScrollMode="Enabled">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>
于 2012-11-09T14:49:18.833 回答