Windows应用商店应用ListView:如何使用GroupStyle?

时间:2014-01-16 13:25:24

标签: c# listview windows-store-apps

将Windows Phone应用程序移植到Windows应用商店并尝试创建分组的ListView。开发人员中心有good article,对列表进行分组没问题。但是有一些我不了解GroupStyle的事情。

本文中的示例使用GroupStyleSelector,该GroupStyleSelector指向以下GroupStyle:

        <GroupStyle x:Key="listViewGroupStyle">
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <Grid Background="LightGray"  >
                        <TextBlock Text='{Binding Key}' Foreground="Black" Margin="10"
                       Style="{StaticResource SubheaderTextBlockStyle}" />
                    </Grid>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>

            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <VariableSizedWrapGrid MaximumRowsOrColumns="3" Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>

GroupStyle.HeaderTemplate的目的很明显,可以在正在运行的应用程序中直接观察此模板的更改。

但是GroupStyle.Panel的优点是什么? docs说:

  

获取或设置一个模板,用于创建用于布置项目的面板。

好的,但无论我如何更改ItemsPanelTemplate(BackgroundColor,Orientation等),List都不会在正在运行的应用程序中更改。

此外还有GroupStyle.ContainerStyle,在示例中没有使用。如果将此添加到GroupStyle,则在运行的应用程序中的列表中也没有任何影响。

那么,GroupStyle.Panel和GroupStyle.ContainerStyle有什么用呢?如何正确使用?

1 个答案:

答案 0 :(得分:1)

我发现你也需要设置ListView的ItemsPanel。默认情况下使用ItemsStackPanel,并且似乎不允许分组ListView中的任何自定义面板。将ItemsPanel设置为VirtualizingStackPanel时,将应用自定义面板,但标题不再是粘滞的。似乎当前的ListView / ItemsStackPanel实现存在一些问题,因为我们没有源代码访问权限,所以很难说清楚。

<ListView 
        ItemsSource="{Binding Source={StaticResource namesSource}}"
        >
            <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Key}" Foreground="Yellow" FontSize="{ThemeResource HubHeaderFontSize}" Margin="6" />
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <controls:WrapPanel />
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
                </GroupStyle>
            </ListView.GroupStyle>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <!--<ItemsWrapGrid FlowDirection="LeftToRight"  Orientation="Vertical"/>-->
                    <VirtualizingStackPanel Orientation="Vertical"/>
                    <!--<ItemsStackPanel Orientation="Vertical"/>-->
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid Background="AliceBlue" Margin="3,0">
                        <TextBlock Text="{Binding}" Foreground="Black" Margin="4,2"/>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>