1,SemanticZoom 有两个重要属性 默认值ZoomedInView(不设置的话,默认显示,包括分类名和分类成员)和ZoomedOutView(这个是缩小后的目录,只要包括分类名,点击跳到对应分类位置)。

2,绑定数据使用CollectionViewSource

要注意:1)IsSourceGrouped属性一定要设置为true,2)ItemsPath设置为child的名字,3)ZoomedInView和CollectionViewSource的View属性绑定,ZoomedOutView和View.CollectionGroups属性绑定。

代码如下:

  1. CollectionViewSource ViewSource = new CollectionViewSource();
  2. ViewSource.IsSourceGrouped = true;
  3. ViewSource.ItemsPath = new PropertyPath("Datas");//对应Datas属性
  4. ViewSource.Source = GetItems();//所有的数据
  5.  
  6. // 绑定数据
  7. ViewDetails.ItemsSource = ViewSource.View; // 全部数据
  8. ViewSummary.ItemsSource = ViewSource.View.CollectionGroups; // 关联的组数据集合
  9. ///绑定的对象类
  10. public class Source
  11. {
  12. private string _Title;
  13. public string Title
  14. {
  15. get { return _Title; }
  16. set { _Title = value; }
  17. }
  18. private List<Data> _Datas;//不一定是Data类,可以是别的类
  19. public List<Data> Datas
  20. {
  21. get { return _Datas; }
  22. set { _Datas = value; }
  23. }
  24. }
    public class Data
            {
                private string _Name;
                public string Name
                {
                    get { return _Name; }
                    set { _Name = value; }
                }
            }

3,模版的绑定问题。

ZoomedOutView可以简单的设置ItemTemplate模版即可,但是要注意,绑定的对象不是原来的值了。

不如原来的绑定为 {Binding Title}现在应该改为 {Binding Group.Title},Group对象为View(View.CollectionGroups)自动生成的对象。

ZoomedInView的子模版即ItemTemplate同ZoomedOutView一样。主要的不同在于GridView.GroupStyle。

GridView.GroupStyle有三个重要属性:HeaderTemplate(即分类名{Binding Title}不用加 Group),Panel(设置子元素的排布),ContainerStyle(一个分类对应的模版,可以不自定义)

ContainerStyle必须包含两个重要的对象:header(下面的ContentPresenter )和items(ItemsControl 注意它的绑定{Binding GroupItems}这个是写死的由View决定)。

<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
<ItemsControl x:Name="ItemsControl" ItemsSource="{Binding GroupItems}"/>

整个模版xaml如下,注意标红的地方:

  1. <SemanticZoom HorizontalAlignment="Left" Margin="0" VerticalAlignment="Center" Width="auto" Height="auto">
  2. <SemanticZoom.ZoomedInView>
  3. <GridView x:Name="ViewDetails" Width="1920" Height="1080" ScrollViewer.IsHorizontalScrollChainingEnabled="False" ScrollViewer.IsVerticalScrollChainingEnabled="False">
  4. <!--分组后,details 的数据模板-->
  5. <GridView.ItemTemplate>
  6. <DataTemplate>
  7. <Grid Background="#022a56" Width="200" Height="65">
  8. <TextBlock TextWrapping="Wrap" FontSize="16" Foreground="Red" Padding="5 0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding Name}"/>
  9. </Grid>
  10. </DataTemplate>
  11. </GridView.ItemTemplate>
  12. <!--分组的样式-->
  13. <GridView.GroupStyle>
  14. <GroupStyle>
  15. <!--分组后,header 的数据模板-->
  16. <GroupStyle.HeaderTemplate>
  17. <DataTemplate>
  18. <TextBlock Text="{Binding Title}" FontSize="26.67" Height="30" Foreground="Yellow" Margin="0 0 0 20" />
  19. </DataTemplate>
  20. </GroupStyle.HeaderTemplate>
  21. <!--分组后,每组数据(包括 header 和 details)的样式-->
  22. <GroupStyle.ContainerStyle>
  23. <Style TargetType="GroupItem">
  24. <Setter Property="Template">
  25. <Setter.Value>
  26. <ControlTemplate TargetType="GroupItem">
  27. <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
  28. <Grid>
  29. <Grid.RowDefinitions>
  30. <RowDefinition Height="Auto"/>
  31. <RowDefinition Height="*"/>
  32. </Grid.RowDefinitions>
  33. <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
  34. <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding GroupItems}" Grid.Row="1"/>
  35. </Grid>
  36. </Border>
  37. </ControlTemplate>
  38. </Setter.Value>
  39. </Setter>
  40. </Style>
  41. </GroupStyle.ContainerStyle>
  42. <!--分组后,每组数据(包括 header 和 details)的 panel-->
  43. <GroupStyle.Panel>
  44. <ItemsPanelTemplate>
  45. <VariableSizedWrapGrid Orientation="Horizontal" Margin="0 0 50 0" ItemHeight="75"/>
  46. </ItemsPanelTemplate>
  47. </GroupStyle.Panel>
  48. </GroupStyle>
  49. </GridView.GroupStyle>
  50. <!--整体数据(一组数据算一个元素)的 panel-->
  51. <GridView.ItemsPanel>
  52. <ItemsPanelTemplate>
  53. <StackPanel Orientation="Horizontal" />
  54. </ItemsPanelTemplate>
  55. </GridView.ItemsPanel>
  56. </GridView>
  57. </SemanticZoom.ZoomedInView>
  58. <SemanticZoom.ZoomedOutView>
  59. <GridView x:Name="ViewSummary" ScrollViewer.IsHorizontalScrollChainingEnabled="False" ScrollViewer.IsVerticalScrollChainingEnabled="False">
  60. <!--分组后,details 的数据模板-->
  61. <GridView.ItemTemplate>
  62. <DataTemplate>
  63. <Grid Background="#022a56" Width="200" Height="65">
  64. <TextBlock TextWrapping="Wrap" FontSize="16" Foreground="Red" Padding="5 0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding Group.Title}"/>
  65. </Grid>
  66. </DataTemplate>
  67. </GridView.ItemTemplate>
  68. </GridView>
  69. </SemanticZoom.ZoomedOutView>
  70. </SemanticZoom>

SemanticZoom配合GridView组件的使用关键点的更多相关文章

  1. 第30讲 UI组件之 GridView组件

    第30讲 UI组件之 GridView组件 1.网格布局组件GridView GridView是一个ViewGroup(布局控件),可使用表格的方式显示组件,可滚动的控件.一般用于显示多张图片,比如实 ...

  2. Flutter中打造多行列列表GridView组件的使用

    GridView组件.一个可滚动的二维空间数组. 在使用无限加载滚动列表的时候,最先使用的还是ListView组件.但若是要一行显示2列或者更多列的滚动列表,GridView组件更为方便.如下 在向服 ...

  3. Flutter——GridView组件(网格列表组件)

    GridView组件的常用参数: 名称 类型 说明 scrollDirection Axis 滚动方法 padding EdgeInsetsGeometry 内边距 resolve bool 组件反向 ...

  4. 安卓开发笔记——GridView组件

    1.什么是GridView? GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的. 2.正文 GridVi ...

  5. 9Flutter GridView组件 以及动态GridView

    main.dart import 'package:flutter/material.dart'; import 'res/listData.dart'; /* GridView : 通过GridVi ...

  6. flutter网格布局之GridView组件

    前面总结了使用ListView来实现列表,但是,有的时候,数据量很大,需要使用矩阵方式排列才能更清晰的展示数据,在flutter中,可以使用网格列表组件GridView来实现这个布局. GridVie ...

  7. vue配合UI组件

    bootstrap 创建项目 首先使用脚手架搭出项目基本框架,具体方法可以参考前面的文章. 1,执行命令创建项目:vue init webpack-simple vue-bootstrap 2,下载相 ...

  8. 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom

    [源码下载] 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom 作者:webab ...

  9. Android开发10.3:UI组件GridView网格视图

    GridView(网格视图) 概述 GridView用于在界面上按行.列分布的方式来显示多个组件         GridView和ListView有共同的父类 : AbsListView       ...

随机推荐

  1. 递推 hdu 1396

    给你边长为n的等边三角形 算有几个三角形 z[1]=1; 第N层 z[n] 1   n-1层 z[n-1] 2   2*n-1 个小的 3   新产生的 正的>1的三角形 n*(n-1)/2; ...

  2. neo4j关闭和开启密码访问权限

    本例:neo4j-enterprise-2.3.1版本 neo4j默认安装是开启访问密码验证 可以发现,在conf/下的neo4j-server.properties配置文件 # Require (o ...

  3. ka/ks

    1. If dN/dS = 1, amino-acid substitutions may be largely neutral. However, there is also the possibi ...

  4. Unity 组件不常用知识备注

    Rigidbody(刚体) Interpolate:当物体进行不规则移动时,通过上一帧的行为来进行平滑移动 Extrapolate:通过推算下一帧的行为来进行平滑移动 PhysicMaterial(物 ...

  5. Unity Animator动画状态机 深入理解(三)二维混合树

    介绍二维之前,先说说一维吧~ 这个是通过旋转角度速度快慢来表现身体的大转和中转~ 通过一个-133~133的数值来进行控制. 注:后面的那个对钩是镜像的意思. 其实二维混合树并没有想象中的那么难.先来 ...

  6. ionic 发布 inoc显示不正确

    前两天因为学习的问题,把本地环境给搞崩了,然后重新安装环境之后发现生成的安装包不能使用,然后找了很多原因都不能解决,因为之前发布ios的时候使用命令 ionic resources的时候就可以将图标显 ...

  7. JQuery------分页插件下载地址

    转载GitHub: https://github.com/pgkk/kkpager

  8. maven报brors occurred during the build

    原因分析: 此问题一般发生在eclipse保存文件并自动部署时候.本人在写项目的时候,还没等部署好,关闭了了eclipse,结果出现了这种情况.有一种产生此错误的原因是因为此项目不不是由eclipse ...

  9. 美国在研新药_读取单个PDF

    QQ:231469242 读取下载美国在研新药PDF内数据:unii,分子式,分子重量,药品名,who,编码,.... PDF无逻辑规则,不能百分之百提取,只能部分提取 几个默认字段为空 # -*- ...

  10. webapi-1