GridView和Virtualizing Stackpanel显示项目网格

时间:2013-07-24 04:44:02

标签: gridview windows-store-apps virtualizingstackpanel

我正在尝试创建一个包含

等元素的网格
| 1 | 4 | 7 | 
| 2 | 5 | 8 | ===> extend
| 3 | 6 | 9 |

由于数据非常大,我需要使用UI虚拟化,我在大多数示例中看到的是VirtualizingStackPanel

以下是我在XAML中设置Gridview的方法。问题是以下代码创建了单个元素的水平行(这是有意义的,因为它只是一个堆栈面板)。

| 1 | 2 | 3 | 4 | .....


        <GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemsGridView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        Grid.RowSpan="3"
        Padding="116,136,116,46"
        ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
        ItemTemplateSelector="{StaticResource CellStyleSelector}"
        ItemClick="ItemView_ItemClick"            
        IsItemClickEnabled="True"
        SelectionMode="Extended"
        SelectionChanged="ItemView_SelectionChanged"
        IsSwipeEnabled="true">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
    </GridView>

如何使用virtualizingstackpanel显示水平延伸的网格?我的数据中没有任何组,所以显示virtualizingstackpanel的所有示例都显示了这一点? 我是Windows Store应用程序开发人员的新手(大多数是在iOS和Android上),所以我们会很感激任何代码示例或资源。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您通过将数据源实施到接口ISupportIncrementalLoading来进行UI虚拟化。试试WrapGrid,然后设置MaximumRowsOrColumns

<GridView
    x:Name="itemGridView"
    AutomationProperties.AutomationId="ItemsGridView"
    AutomationProperties.Name="Items"
    TabIndex="1"
    Grid.RowSpan="3"
    Padding="116,136,116,46"
    ItemsSource="{Binding Source={StaticResource itemsViewSource}}"
    ItemTemplateSelector="{StaticResource CellStyleSelector}"
    ItemClick="ItemView_ItemClick"            
    IsItemClickEnabled="True"
    SelectionMode="Extended"
    SelectionChanged="ItemView_SelectionChanged"
    IsSwipeEnabled="true">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid MaximumRowsOrColumns="3" Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>