马宁的Windows Phone 7.1初体验(三)——Tile

本文详细介绍了如何在 Windows Phone 7.1 中添加、修改和实现复杂 Tile 的编程方法,包括如何显示多个 Tile、设置 Tile 的初始值、指定 Tile 更新时间间隔等内容。

作者:马宁

前边介绍Push Notification时,其实已经谈到了Tile Notification。在Windows Phone 7.1中,Smart Tile得到了极大的提高。我们不但可以控制Tile的动画显示、内容和背景切换,而且还能够为同一个应用提供两个Tile,比如一个天气预报的应用程序,就可以在手机的首页上显示多个Tile,一个是北京的天气,另一个是上海的天气等。

实现Application Tile

MSDN上的文章写的又臭又长,其实挺简单的事情,弄得那么复杂。我试着改写了一下例子,加入到应用的一个Button点击事件里:

            // Application Tile is always the first Tile, even if it is not pinned to Start.
            ShellTile TileToFind = ShellTile.ActiveTiles.First();

            // Set the properties to update for the Application Tile.
            // Empty strings for the text values and URIs will result in the property being cleared.
            StandardTileData NewTileData = new StandardTileData
            {
                Title = "Title",
                BackgroundImage = new Uri("Background.png", UriKind.Relative),
                Count = 2,
                BackTitle = "Back Tilte",
                BackBackgroundImage = new Uri("Background2.png", UriKind.Relative),
                BackContent = "This is BackContent"
            };

            // Update the Application Tile
            TileToFind.Update(NewTileData);

首先,我们要引用Microsoft.Phone.Shell命名空间,然后通过ShellTile.ActiveTiles.First()方法来获取应用最主要的ShellTile.每个应用至少会有一个Tile,所以不用担心该对象为空。然后我们创建一个StandardTileData对象,为其中的属性赋值。属性分为两组,每组都会有背景图片、标题和内容,显示位置如下图所示。如果设置两组Tile属性,则Tile在显示一段时间后会自动切换。最后,我们调用ShellTile对象的Update方法,将StandardTileData对象传递进去,就完成了新Tile的设置。BackgroundImage和BackBackgroundImage指定的是图片的URI,可以是本地的图片,也可以是来自网络的图片。我们使用的两个图片,都是以Content方式加入到工程中的图片。

clip_image002

当我们将程序部署到设备或模拟器上时,首先会在Application List里出现对应的图标。我们长按图标,会出现一个菜单,选择Pin to start,会将应用程序的图标显示到手机首页上。

运行应用程序,点击Button后,Tile会被更新成新的式样。两张背景和内容会交替显示,显示效果如下图所示:

clip_image004 clip_image006 clip_image008

实现 Secondary Tile

在完成了Application Tile的显示之后,我们接下来要实现更复杂的Secondary Tile,当然,我们可以添加多个Tile。在实现Secondary Tile时,有两个技术点需要实现,一个是Tile的添加与显示;另一个则是,程序启动时如何区分是由哪个Tile点击启动应用的。

首先,我们来看如何添加Secondary Tile的代码:

            // Look to see whether the Tile already exists and if so, don't try to create it again.
            ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("DefaultTitle=FromTile"));

            // Create the Tile if we didn't find that it already exists.
            if (TileToFind == null)
            {
                // Create the Tile object and set some initial properties for the Tile.
                // The Count value of 12 shows the number 12 on the front of the Tile. Valid values are 1-99.
                // A Count value of 0 indicates that the Count should not be displayed.
                StandardTileData NewTileData = new StandardTileData
                {
                    BackgroundImage = new Uri("Background.png", UriKind.Relative),
                    Title = "Secondary Tile",
                    Count = 12,
                    BackTitle = "Back of Tile",
                    BackContent = "Welcome to the back of the Tile",
                    BackBackgroundImage = new Uri("Background2.png", UriKind.Relative)
                };

                // Create the Tile and pin it to Start. This will cause a navigation to Start and a deactivation of our application.
                ShellTile.Create(new Uri("/MainPage.xaml?DefaultTitle=FromTile", UriKind.Relative), NewTileData);
            }
            else
            {
                TileToFind.Delete();
            }

首先调用ShellTile.ActiveTiles.FirstOrDefault方法,获取在NavigationUri属性中包含“DefaultTitle=FromTile”字样的ShellTile对象,如果获取到的ShellTile对象为空,则创建Secondary Tile,否则调用ShellTile的Delete方法,删除这个Tile。

创建Secondary Tile的过程,首先创建StandardTileData对象,将显示的各个参数进行赋值,这一步与Application Tile相同;然后,调用ShellTile的Create方法,第一个参数是URI,即点击该Tile后,调用Page的命令行,可以包含参数,第二个参数是StandardTileData对象,用于指定显示式样。

需要注意的是,如果Page命令行指定不对,会引起用户点击Tile时,应用直接退出,由于无法调试,第一次接触这个问题时,会找不到具体的原因。

Secondary Tile显示效果如下:

clip_image010 clip_image012

接下来,我们就要处理区分不同Tile点击的事件了,需要重载MainForm的OnNavigatedTo方法:

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            string value = null;

            if (this.NavigationContext.QueryString != null)
            {
                this.NavigationContext.QueryString.TryGetValue("DefaultTitle", out value);
                if (value != null)
                {
                    textBoxTitle.Text = value;
                }
                else
                {
                    textBoxTitle.Text = "FromMain";
                }
            }

            base.OnNavigatedTo(e);
        }

通过NavigationContext.QueryString的TryGetValue方法来获取DefaultTitle参数的值,如果无法获取到该值,则认为该点击来自第一个Tile,相反则来自第二个Tile。我们将参数显示在主页面的文本框里,当然,实际应用中可以有更加复杂的业务逻辑。界面显示效果如下:

clip_image014

到这里,我们简单介绍了如何添加Tile、修改Tile内容,除此之外,还有如何修改Tile的初始值,指定Tile更新的时间间隔等。在这里,我们就不介绍了,大家可以参考又臭又长的MSDN文档,这部分不长,我可以保证。

写在最后

好了,到这里,我们正式将Windows Phone 7.1中的Tile编程的内容介绍完了。Windows Phone采用的是HUB方式,对于功能进行分类,所以,就要求Tile具备更丰富的显示方式和展现形式。而且,多个应用可以对应于一个Tile,同样一个应用也可以对应多个Tile,这样极大提高了主页与应用之间交互的丰富程度。

当然,具体的Tile,还要在实际的开发中使用,才能真正了解其优缺点。

OpenXLive杯Windows Phone游戏开发大赛

clip_image016

OpenXLive杯Windows Phone游戏开发大赛,是由OpenXLive联合国内知名的开发者社区:DevDiv、智机网、WPMind、Silverlight银光中国和XNA游戏世界,一起举办的针对Windows Phone游戏开发的比赛。

http://www.openxlive.net/posts/news/40

针对矿山运输车辆超载监管中长期存在的源头管控缺失、数据孤岛严重、人工执法覆盖面有限等突出问题,本方案构建了一套以矿山企业侧地磅和过车数据为核心数据源的智能监管体系。方案采用"感知层—传输层—平台层—应用层"四层总体架构,在矿山企业出入口部署地磅称重系统、车牌识别摄像机、视频监控及GPS/北斗电子围栏等感知设备,通过光纤专线与5G无线相结合的传输网络,将称重数据、过车图片、视频流和定位轨迹实时汇聚至数据中台。平台层基于PostgreSQL、TDengine、MinIO等多元存储和Flink流式计算引擎,实现数据接入、治理、计算与服务全链路支撑。应用层面向交警和运管部门,提供实时监控中心、超载智能级预警、车辆轨迹追踪、多维数据分析、执法联动电子证据包生成、企业信用A/B/C/D四级评价等功能,并与交警六合一、运管综合执法、治超非现场执法等系统深度对接,打通跨部门数据壁垒。方案遵循源头治理、数据驱动、部门协同、安全可靠、适度超前、分步实施六大原则,按"一期试点—二期推广—期深化"分步推进,建设周期12至14个月。预期实现超载检出率从20%提升至90%、执法响应从小时级缩短至分钟级、监管覆盖率100%,同时减少道路维修费用约30%、降低人工执法成本50%,为道路交通安全治理现代化提供可落地的技术路径。
代码下载链接: https://pan.quark.cn/s/73a448bd47e6 功能: 1、跨运营商统一缴费:提供对移动、联通、电信、网通等运营商的联合缴费服务,并包含手机号码办理及游戏点卡充值功能。 2、代理商体系管理:系统为代理商提供集中化的登录账号分配;各代理端可实现预存话费、佣金的综合结算,支持实时查询缴费账单与佣金状态,预存款自动计入系统。 3、数据迁移功能:系统内所有数据及操作日志均可导出为EXCEL格式文件。 4、资金流转安全防护:确保数据在传输环节的机密性;通过IP地址绑定及设备绑定机制,构建安全可靠的防护体系。 5、账户信息查询:支持查询缴费目标号码的机主身份信息、账户余额及欠费明细,可在缴费前后进行查询操作。 6、自主运营平台:采用独立服务器架构,不受第方机构干预,具备界面定制能力,是运营商优选的缴费合作平台。 7、分级权限设置:系统可根据代理用户类型分配差异化的操作权限,包括缴费权限、查询权限及管理权限。 8、自动化运行机制:服务器实现全流程自动化无人值守操作,所有执行记录以黑匣子形式实时存档,确保永久可追溯。 9、数据容灾保障:服务器支持双机热备运行模式,两台主机部署于不同地理位置,任何单点故障不会引发数据丢失。 10、即时通讯系统:配备完善的实时消息通知功能,涵盖新订单提醒、处理结果通知、服务器公告推送及代理商内部通讯。 11、语音验证流程:用户缴费时将触发语音二次确认环节;通过语音提示完成验证操作。 12、号码输入优化:缴费流程支持手动输入目标号码,降低输入错误风险。 政策: 平台具备全国范围的运营资质,对于希望进入代理行业但缺乏经验的用户,本平台是理想选择。签订正式合作协议后,公司将提供上门安装指导及系统操作培训,并定制符...
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值