【Win10应用开发】自适应磁贴中的分组

老周在上一篇文章中介绍过了自适应磁贴的基本结构,以及给大家演示了一些例子。

本文老周给大伙伴们说说自适应磁贴的另一个特点——分组呈现。

当磁贴的内容被分组后,每个组中的内容就会被视为一个整体。比如某磁贴在更新时定义了其内容包含有两个组,有些设备(比如手机、上世纪70年代的电脑、小霸王学习机等)的分辨率较低,磁贴不能显示两个组的信息,于是就会把第一组的内容整个显示出来,第二组信息就被忽略。就算空间不够,连第一组的内容都显示不全,然而一个组会被视为一个整体,不管空间够不够,第一组都要全部呈现。如果空间相当充足,当然两个分组的内容都会显示出来。

分组的方法是在binding元素下使用1个或n个group元素,每个group元素代表一组。对于单个group元素而言,它的子元素必须是subgroup(子组)元素,数量可以为n个,但至少你得有一个subgroup元素。正因为如此,group元素下面最少最少都会有一个subgroup元素。

先给大伙看一个例子。

<tile>
  <visual>
    <binding template="TileMedium">
      <group>
        <subgroup>
          <text hint-style="subtitle">第一组</text>
          <text>今天天气真好。</text>
        </subgroup>
      </group>
      <group>
        <subgroup>
          <text hint-style="subtitle">第二组</text>
          <text>天上的白云真白。</text>
        </subgroup>
      </group>
    </binding>
  </visual>
</tile>

上面定义的这个磁贴,分为两个组,每个组中都有两个text元素来呈现文本,虽然group中不打算设置子分组,但必须有一个subgroup,因为group元素的子元素必须为subgroup

得到的磁贴如下图所示。

在一个group中,实际上一个subgroup可以理解为一列,因为subgroup元素有一个hint-weight属性,这个属性用来定义该subgroup的比重,这个比重实际上是该subgroup的宽度所占的比例。所以说,subgroup其实是用来定义列的。

大家应该会用XAML中的Grid控件,大家不妨想想,Grid在划分行和列的时候,是不是有一个按比例划分的方法。比如第一行为1*,第二行为2*,那就是把行的所有空间均分为3等份,第一行占1/3,第二行占2/3。

hint-weight的原理是一样的,但是,它不用写“*”,比如,一个组中有两个subgroup,每个subgroup的hint-weight的值都为1,那么每个subgroup的宽度将相等,各占50%。

再如,三个subgroup,设置它们的hint-weight属性。第一个为2,第二个为1,第三个为3,即把所有空间平均分为6份,第一列占2/6,第二列占1/6,第三列占3/6。

请看下面的例子:

<tile>
  <visual>
    <binding template="TileWide">
      <group>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/关羽.png" hint-removeMargin="true"/>
          <text hint-align="center" hint-style="body">关羽</text>
        </subgroup>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/张飞.png" hint-removeMargin="true"/>
          <text hint-align="center" hint-style="body">张飞</text>
        </subgroup>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/曹操.png" hint-removeMargin="true"/>
          <text hint-align="center" hint-style="body">曹操</text>
        </subgroup>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/孙坚.png" hint-removeMargin="true"/>
          <text hint-align="center" hint-style="body">孙坚</text>
        </subgroup>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/袁绍.png" hint-removeMargin="true"/>
          <text hint-align="center" hint-style="body">袁绍</text>
        </subgroup>
      </group>
    </binding>
  </visual>
</tile>

每个subgroup的hint-weight的值都为1,表明磁贴将一个组的水平空间平分为5列,每列显示图像和文本。
大家注意到,这里image元素设置了一个hint-removeMargin属性为true,表示删除图像的边距。如果为false,表示保留边距。默认情况下,图像周围的边距为8,由于这个磁贴内容多,比较拥挤,所以要去掉图像默认的边距。

磁贴更新后如下图所示。

再看下面一例:

<tile>
  <visual>
    <binding template="TileWide">
      <group>
        <subgroup hint-weight="1">
          <image src="ms-appx:///Assets/images/曹操.png" hint-removeMargin="true" />
        </subgroup>
        <subgroup hint-weight="5">
          <image src="ms-appx:///Assets/images/袁绍.png" hint-removeMargin="true" />
        </subgroup>
        <subgroup hint-weight="3">
          <image src="ms-appx:///Assets/images/孙坚.png" hint-removeMargin="true" />
        </subgroup>
      </group>
    </binding>
  </visual>
</tile>

一个分组中有三个subgroup,即三列,所有空间被划分为9等份,第一列占其中1份,第二列占5份,第三列占3份。
磁贴更新后如下图。

另外,hint-weight属性还可以使用百分比来划分列,方法是指定的所有subgroup的weight值加起来刚好等于100,这时候就会被识别为百分比。

看例子。

<tile>
  <visual>
    <binding template="TileWide">
      <group>
        <subgroup hint-weight="70">
          <image src="ms-appx:///Assets/images/张飞.png" hint-removeMargin="true" />
        </subgroup>
        <subgroup hint-weight="30">
          <image src="ms-appx:///Assets/images/袁绍.png" hint-removeMargin="true" />
        </subgroup>
      </group>
    </binding>
  </visual>
</tile>

第一列的比重为70,第二列的比重为30,加起来正好是100,所以识别为百分比。
磁贴更新后的结果如下图:

好了,本文的牛皮就吹到这里。

示例源代码下载

时间: 2024-10-04 03:29:08

【Win10应用开发】自适应磁贴中的分组的相关文章

【Win10 应用开发】自适应Toast通知的XML文档结构

原文:[Win10 应用开发]自适应Toast通知的XML文档结构 老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6只需要20秒,不信的话,老周笔划笔划一下,你就明白了. 1.属性自动初始化.在4.0中引入了这样声明属性: public int VVVV { get; set;} 以前是属性包装一个字段,在初始化属性时只要对字段赋值即可,这个省略

Viewport在开发手机Web中的应用

目前比较主流的移动设备系统包括 Android,IOS ,Symbian,BlackBerry 与Web OS.这些系统浏览器都是基于webkit核心,而webkit号称是一款全功能的移动浏览器,支持 HTML + CSS + JavaScript,但由于移动设备本身与PC的差异,导致我们开发的网页在移动设备上总是会存在一些不如人意的地方. Viewport 翻译为中文可以叫做"视区",大家都知道移动设备的屏幕一段都比PC小很多,webkit浏览器会将一个较大的"虚拟&quo

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Cordova,Cordova只负责实现JavaScript调用原生代码的功能,是一个壳,而壳里具体用什么样式,在H

Win10 UWP开发系列:实现Master/Detail布局

在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档:https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/dn997765.aspx 样式如下: 在微软官方的Sample里,有这种样式的代码示例,下载地址:https://github.com/Microsoft/Windows-univ

Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题

原文:Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题 最近在开发一个项目时,遇到了一个奇怪的问题,项目依赖的最低版本是10586,目标版本是14393,开发完毕发布到商店后,很多用户报无法正常加载页面.经查,有问题的都是Win10 10586版本. 我上篇博客中写到的自定义的AppBar控件,也存在这个问题,10586会报错. 为此特意下载了10586的SDK调试.错误显示,一个样式找不到,名为ListViewItemBackground.因为开发的时候是基于

Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

【Win10 应用开发】人脸识别

原文:[Win10 应用开发]人脸识别 可能你会认为人脸识别用起来会很复杂,老周当初也这么想,但通过实际操作后,我发现非然. 经过微软封装的东西,向来都是复杂问题简单化,只要用得舒心,代码越少越好,用最少的代码做最多的事情,此为大师境界也. 好,屁话不说,先介绍一下如何完成人脸识别(或者叫人脸检测,随你怎么翻译,反正知道是怎么一回事就行).核心的类是FaceDetector,不要问我这个类在哪里,自己打开对象浏览器搜索. 第一步,访问静态属性IsSupported,看看当前平台是不是支持人脸识别

【Win10 应用开发】解决VS 2015 RC不能调试手机应用的问题

原文:[Win10 应用开发]解决VS 2015 RC不能调试手机应用的问题 VS2015 RC已发布,当然这个版本还不能用于实际生产中,如果你没有测试环境,就等正式版出来,RC都来了,RTM就不远了. 如果你也像老周一样,已经在耍RC版了,你可能会遇到下面问题: 安装Win 10 SDK后,在手机模拟器上调试应用程序时会失败,错误如下: 狄胖胖经常跟元芳说,解决问题一定要顺藤摸瓜,抽丝剥茧.那么咱们就看看错误信息,既然说是找不到这个文件,那我们就打开这个目录,看看里面有什么. 打开以下目录:

【Win10 应用开发】集成语音命令

原文:[Win10 应用开发]集成语音命令 记得老周以前在写WP8应用开发的文章时,曾经写过语音命令集成的文章,后来8.1的时候“小娜”问世,但考虑到其变化不大,故老周没有补写相应的文章. 今天,老周打算补一下Win 10通用应用开发中,有关语音命令集成相关的内容.虽然还是一脉相承,大的变化没有,不过Win10 sdk在语音命令定义文件中添加了新内容,而且现在不仅能在手机应用中加入语音集成,在面向PC和板子的应用中也能如愿,因为应用程序已经通用. 同理,在开始之前,老周仍然先给大家讲个故事. 话