Windows8 创建分组GridView

it2022-05-07  13

简介:

1. One Level

1: public enum Position { C, PF, SF, SG, PG }; 2:   3: public class Player 4: { 5: public string Name { get; set; } 6: public int Number { get; set; } 7: public Position PositionInTeam { get; set; } 8: public ImageSource Image { get; set; } 9: public Team TeamIn { get; set; } 10:   11: public void SetImage(Uri baseUri, String path) 12: { 13: Image = new BitmapImage(new Uri(baseUri, path)); 14: } 15: }

按PositionInTeam分组显示Player:

 

2. Two Levels

1: public class Team 2: { 3: public Team() 4: { 5: PlayerList = new List<Player>(); 6: } 7: public string Name { get; set; } 8: public List<Player> PlayerList { get; set; } 9: }

按Team分组显示Player信息:

 

 

核心类:

CollectionViewSource Class

GroupStyle Class

 

 

关键点:

1. One Level

设置CollectionViewSource的IsSourceGrouped属性为true

用Linq查询为集合分组

1: public IOrderedEnumerable<IGrouping<Position, Player>> GetGroupedPlayerData() 2: { 3: IOrderedEnumerable<IGrouping<Position,Player>> groupedData = from p in Players group p by p.PositionInTeam into grp orderby grp.Key select grp; 4: return groupedData; 5: }

 

2. Two Levels

设置CollectionViewSource的IsSourceGrouped属性为true

设置CollectionViewSource的ItemsPath属性为子集合

1: <Page.Resources> 2: <CollectionViewSource x:Name="cvsTeams" IsSourceGrouped="True" ItemsPath="PlayerList"/> 3: <CollectionViewSource x:Name="cvsPlayers"/> 4: </Page.Resources>

 

 

代码:

One Level:

1: <GridView ItemsSource="{Binding Source={StaticResource cvsPlayers}}" 2: Margin="120" MaxHeight="500"> 3: 4: <!--Item的模板--> 5: <GridView.ItemTemplate> 6: <DataTemplate> 7: <StackPanel Margin="10,10,0,0" Orientation="Horizontal" HorizontalAlignment="Left" Width="300"> 8: <Image Source="{Binding Image}" Height="80" Width="100" VerticalAlignment="Center" Margin="0,0,10,0" HorizontalAlignment="Left"/> 9: <StackPanel Orientation="Vertical" Margin="0" HorizontalAlignment="Left"> 10: <TextBlock Text="{Binding Name}" FontWeight="Bold" Style="{StaticResource ItemTextStyle}"/> 11: <TextBlock Text="{Binding Number}" Style="{StaticResource ItemTextStyle}"/> 12: </StackPanel> 13: </StackPanel> 14: </DataTemplate> 15: </GridView.ItemTemplate> 16: 17: <!--所有的Group在GridView中的排列方式--> 18: <GridView.ItemsPanel> 19: <ItemsPanelTemplate> 20: <StackPanel Orientation="Horizontal"/> 21: </ItemsPanelTemplate> 22: </GridView.ItemsPanel> 23: 24: <GridView.GroupStyle> 25: <GroupStyle HidesIfEmpty="True"> 26: 27: <!--Group标题的模板--> 28: <GroupStyle.HeaderTemplate> 29: <DataTemplate> 30: <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0"> 31: <TextBlock Text="{Binding Key}" Foreground="Gray" FontSize="25" Margin="5"></TextBlock> 32: </Grid> 33: </DataTemplate> 34: </GroupStyle.HeaderTemplate> 35: 36: <!--GroupItem样式--> 37: <GroupStyle.ContainerStyle> 38: <Style TargetType="GroupItem"> 39: <Setter Property="FontFamily" Value="Segoe UI" /> 40: <Setter Property="Padding" Value="0" /> 41: <Setter Property="Margin" Value="0,0,0,0" /> 42: <Setter Property="HorizontalContentAlignment" Value="Left" /> 43: <Setter Property="VerticalContentAlignment" Value="Top" /> 44: <Setter Property="BorderThickness" Value="0"/> 45: <Setter Property="TabNavigation" Value="Local" /> 46: </Style> 47: </GroupStyle.ContainerStyle> 48: 49: <!--Item在Group中的排列方式--> 50: <GroupStyle.Panel> 51: <ItemsPanelTemplate> 52: <VariableSizedWrapGrid/> 53: </ItemsPanelTemplate> 54: </GroupStyle.Panel> 55: </GroupStyle> 56: </GridView.GroupStyle> 57: </GridView>

Code Behind

1: protected override void OnNavigatedTo(NavigationEventArgs e) 2: { 3: cvsPlayers.Source = new SampleDataSource().GetGroupedPlayerData(); 4: }

 

Two Levels:

1: <GridView ItemsSource="{Binding Source={StaticResource cvsTeams}}" 2: Margin="120" MaxHeight="500"> 3:   4: <!--Item的模板--> 5: <GridView.ItemTemplate> 6: <DataTemplate> 7: <StackPanel Margin="10,10,0,0" Orientation="Horizontal" HorizontalAlignment="Left" Width="300"> 8: <Image Source="{Binding Image}" Height="80" Width="100" VerticalAlignment="Center" Margin="0,0,10,0" HorizontalAlignment="Left"/> 9: <StackPanel Orientation="Vertical" Margin="0" HorizontalAlignment="Left"> 10: <TextBlock Text="{Binding Name}" FontWeight="Bold" Style="{StaticResource ItemTextStyle}"/> 11: <TextBlock Text="{Binding Number}" Style="{StaticResource ItemTextStyle}"/> 12: <TextBlock Text="{Binding PositionInTeam}" Style="{StaticResource ItemTextStyle}"/> 13: </StackPanel> 14: </StackPanel> 15: </DataTemplate> 16: </GridView.ItemTemplate> 17:   18: <!--所有的Group在GridView中的排列方式--> 19: <GridView.ItemsPanel> 20: <ItemsPanelTemplate> 21: <StackPanel Orientation="Horizontal"/> 22: </ItemsPanelTemplate> 23: </GridView.ItemsPanel> 24:   25: <GridView.GroupStyle> 26: <GroupStyle HidesIfEmpty="True"> 27:   28: <!--Group标题的模板--> 29: <GroupStyle.HeaderTemplate> 30: <DataTemplate> 31: <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Margin="0"> 32: <TextBlock Text="{Binding Name}" Foreground="Gray" FontSize="25" Margin="5"></TextBlock> 33: </Grid> 34: </DataTemplate> 35: </GroupStyle.HeaderTemplate> 36:   37: <!--GroupItem样式--> 38: <GroupStyle.ContainerStyle> 39: <Style TargetType="GroupItem"> 40: <Setter Property="FontFamily" Value="Segoe UI" /> 41: <Setter Property="Padding" Value="0" /> 42: <Setter Property="Margin" Value="0,0,0,0" /> 43: <Setter Property="HorizontalContentAlignment" Value="Left" /> 44: <Setter Property="VerticalContentAlignment" Value="Top" /> 45: <Setter Property="BorderThickness" Value="0"/> 46: <Setter Property="TabNavigation" Value="Local" /> 47: </Style> 48: </GroupStyle.ContainerStyle> 49:   50: <!--Item在Group中的排列方式--> 51: <GroupStyle.Panel> 52: <ItemsPanelTemplate> 53: <VariableSizedWrapGrid/> 54: </ItemsPanelTemplate> 55: </GroupStyle.Panel> 56: </GroupStyle> 57: </GridView.GroupStyle> 58: </GridView>

Code Behind

1: protected override void OnNavigatedTo(NavigationEventArgs e) 2: { 3: cvsPlayers.Source = new SampleDataSource().GetPlayerList(); 4: cvsTeams.Source = new SampleDataSource().GetGroupedTeamData(); 5: }

 

 

可运行Sample下载链接:

https://skydrive.live.com/redir?resid=E6E173A69F1B1C54!1434&authkey=!ALh7u2nSHlc0Uig

转载于:https://www.cnblogs.com/Allen-Li/archive/2012/12/19/2825339.html

相关资源:数据结构—成绩单生成器

最新回复(0)