日期:2014-05-17 浏览次数:20774 次
基于Silverlight开发Metro App可以使用Silverlight原生的控件,为了更好的开发Metro App,控件库又专门增加了几个新的控件,如:GridView、Flipview、ProgressRing、SemanticZoom和VariableSizedWrapGrid等,这些控件为平板设备提供了良好的触控体验,这一章我们来介绍一下这几个控件的简单用法。
GridView是以网格样式展现一组数据,在Web开发中就已经存在,主要用于多行多列的数据显示中。Metro中以分组形式表达数据使用GridView更得心应手,在Silverlight 5及以前版本中,如果想实现分组数据展现要先写一堆数据模板,而在Metro中,这种展现方式得到了增强,GridView 是专门用于分组数据的,如果仅仅是列表数据,则建议使用ListView。
GridView控件有几个非常重要的常用成员:
(1) 数据源
如果是以分组形式展示数据,则数据源必须是可分组的,也即是有主从关系,通常是主列表项中每一项可能存在着某一子列表。GridView的数据源依托于CollectionViewSource,CollectionViewSource有一个属性IsSourceGrouped指明数据源是否是分组源数据集合,还有一个属性ItemsPath指明查找子数据项的路径,通常将可分组的源数据指定给CollectionViewSource对象的Source属性,如下定义了年级与学生的主从关系,年级包含了学生的数据列表:
public class Grade
{
public Grade()
{
Students = new ObservableCollection<Student>();
}
public string Name { get; set; }
public ObservableCollection<Student> Students { get; private set; }
}
public class Student
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
public bool IsClassLeader { get; set; }
public string Grade { get; set; }
}
以下代码来模拟生成三个年级的学生:
private List<Grade> CreateGrades()
{
List<Grade> Grades = new List<Grade>();
for (int i = 1; i <= 3; i++)
{
Grade grade = new Grade();
grade.Name = "年级 " + i;
for (int j = 1; j <= 5; j++)
{
grade.Students.Add(new Student()
{
Name = "王学生 " + j,
IsClassLeader = true,
Birthday = startDate.AddDays(j + 1),
Grade =