当前位置:文档之家› 毕业论文

毕业论文

个人生活小助手设计

摘要

随着社会经济的飞速发展,日渐加快的生活节奏使得人们每天的生活都过得相当忙碌。为此,切实有效地设定日程安排,将会使人们的生活过得更加有条不紊,对提高个人的生活效率有着极为重要的意义。在此背景下,本文提出了一种基于Windows 8操作系统的个人生活小助手设计,主要任务是帮助人们进行日程事务的管理,将每天日常工作生活进行妥善安排,并做出有效的记录,从而达到备忘的目的,同时也具有对日常工作进行指导和监督的作用。

本次设计是基于Windows 8开发平台,采用Grid Application的Windows UI 风格,使用C#加XAML语言在Visual Studio 2012开发环境下开发完成。本文首先阐述了系统的开发背景与开发环境,接着对系统的构架进行分析,由此对各部分功能的实现进行了深入的讨论,最后总结了开发阶段与测试阶段所遇到的问题与解决方法。经测试表明,此个人生活小助手设计具有一定的实用价值。

关键词:个人生活小助手;C#;XAML;Grid Application;Windows UI;windows 8;visual studio 2012

Design of Personal Life Assistant

Abstract

With the rapid development of the social economy, the pace of life accelerated increasingly makes people's daily life very busy. Therefore, effective schedule will enable people to live more orderly. So it has a great significance to improve the efficiency of the individual's life. In this context, the design of personal life assistant based on the Windows 8 operating system is proposed in this thesis. This assistant mainly helps people to manage daily schedule and set effective records, so as to achieve the purpose of the memo. Meanwhile, it also has the role of guiding and supervising daily work.

The operation system that the software is based on is Windows 8 development platform, and the software is developed on Visual Studio 2012 development environment by using the Grid Application Windows UI style and C # , XAML languages. Firstly, in this thesis the background and development environment for the software are introduced. Secondly, analysis of the architecture of the software is discussed. On this basis, the realization of the function of each part is discussed deeply. At last, the problems and solutions encountered in the development phase and testing phase are concluded. In some extent, the tests show that the personal life assistant has practical value.

Key words: personal life Little Helper; C #; XAML; the Grid Application; the Windows UI; windows 8; visual studio 2012

目录

论文总页数:28页1 引言 (1)

1.1 选题背景及意义 (1)

1.2 国内外研究现状 (1)

2 个人生活小助手需求分析 (1)

2.1 业务需求 (1)

2.2 功能需求 (1)

3 个人生活小助手设计所用技术与开发环境 (2)

3.1 开发环境的选择(Windows 8+Visual Studio 2012) (2)

3.2 开发语言的选择(C#+XAML+XML) (4)

3.3 界面的选择(Windows UI) (4)

3.4 Visual Studio的部分文件 (5)

3.5 Visual Studio 2012页面模板的集合 (5)

4 个人生活小助手设计的实现 (5)

4.1 系统的总体架构 (5)

4.2 绑定图片的实现 (6)

4.3 数据文件的读写 (8)

4.4 初始界面的设计与实现 (9)

4.5 日程管理模块的设计与实现 (11)

4.5.1 日程管理模块设计流图 (11)

4.5.2 新建日程功能 (11)

4.5.3 日程列表管理与日程搜索功能设计 (15)

4.5.4 事务的修改、删除功能设计流程与关键程序分析 (18)

4.6 提醒功能的设计流程与关键程序分析 (21)

4.7 个人生活小助手的网络分享 (23)

5 软件的测试 (25)

6 个人生活小助手的不足与提高 (25)

结论 (25)

参考文献 (26)

致谢 (26)

声明........................................................................................ 错误!未定义书签。

1 引言

1.1 选题背景及意义

随着社会经济的飞速发展,日渐加快的生活节奏使得人们每天的生活都过得相当忙碌,很多日程需要安排。个人的日常工作、领导的重要会议、个人重要日期等等,需要在特定时间给予醒目标识或者提示。为此,切实有效地设定日程安排,将会使人们的生活过得更加有条不紊,对提高个人的生活效率有着极为重要的意义。在计算机开始使用的时候,个人的日程安排就有了明显的进步,我们可以通过计算机来记录备忘数据,并可以提醒给用户。一个功能齐全,简单实用的关于日程管理的个人生活小助手不但能够使我们的生活更有条理化,更能让我们节约更多的时间去做更多的事情。

去年发布的windows 8操作系统是微软公司最新推出的一款全新概念的操作系统,由于此操作系统才发布不久,很多应用还不是特别成熟,因而在此操作系统之上设计一个关于日程管理的个人生活小助手是非常具有使用价值的。Windows 8下关于日程管理的个人生活小助手,让使用者可以清晰的了解自己的日程安排,使得个人的生活更加具有条理性,同时也可以让使用者对于一些重要日期、重要事情能够在相应的时间得到提醒。

1.2 国内外研究现状

关于日程管理的个人生活小助手,经过多年的发展,国内外都有不少成熟的软件,其中大多都是支持Windows以前的版本(Windows 7、Windows Vista、Windows XP),或者基于android、ios移动平台的。比如PC端关于日程管理的生活小助手就有超级日程管理、桌面日程管理软件、365桌面日历等,在这个移动互联飞速发展,智能手机普及的时代,大部分的PC软件都有相应的手机版,个人生活小助手也不例外。如今的个人生活小助手朝着更加全面的方向在发展,越来越多日常所需的小功能被加到个人生活小助手中。

2 个人生活小助手需求分析

2.1 业务需求

作为人们日程生活的一部分,日程管理具有非常特殊意义,此次个人生活小助手的设计偏向日程管理,是一个可以完成人们日程工作计划制定的设计。在这个计算机技术急速发展的年代,针对最新的操作系统设计一个方便实用的个人生活小助手,让个人的日程管理更加简单明了,让计算机能够提醒用户,避免忘记重要事情,是非常必要的。

2.2 功能需求

1.添加功能:用户可以进入系统中对新日程进行添加。

2.查询功能:用户可以进入系统中查询已经设定的日程。

3.修改功能:用户可以进入系统中修改已经设定的日程。

4.删除功能:用户可以进入系统中对已经设定的日程进行删除。

5.提醒功能:在用户设定的日程时间到的时候给予用户相应的提醒。

6.搜索功能:用户在win8的搜索界面能够找到相应的日程。

7.分享功能:用户可以将该应用通过微博,邮件等形式分享给好友。

3 个人生活小助手设计所用技术与开发环境

3.1 开发环境的选择(Windows 8+Visual Studio 2012)

本次关于日程管理的个人生活小助手设计是基于Windows 8开发平台,采用微软公司最新推出的开发环境Visual Studio 2012来完成的。

Windows 8操作系统是由微软公司开发,具有革命性的操作系统。Windows 8在Windows 7的基础上在性能、隐私性、安全性、系统稳定性方面都有长足的进步,减少了内存,为用户的应用程序提供了更大的空间,几乎所有能在Windows 7上运行的程序都能在Windows 8上运行[1]。Windows 8操作系统的主旨是让人们的日常电脑操作更加简单和快捷,为用户提供高效的工作环境。同时,Windows 8还引入了全新的Windows UI界面,方面用户进行触摸操作,并且即时显示有用信息,Windows UI界面同样也适用于鼠标键盘操作。

Windows 8是为应用和触摸重塑的Windows,因而Windows商店应用是Windows 8的体验的核心,用户可以通过最新版本的Visual Studio 2012开发工具的支持,将更高效的开发和部署应用,并取得更高的回报。在Windows 8中,可以利用自己现有的技能和代码基础来为用户创建Windows UI风格的应用[2]。

在本次Windows 8商店应用涉及到的Grid Application模板是一个多页的、项目组之间导航的Windows UI风格的应用程序包含三个页面:groupDetailsPage、groupedItemsPage、itemDetailsPage。

Visual Studio系列开发软件是最流行的windows平台应用程序开发环境。随着Windows 8的全球发布,整个世界已经发生了非常显著的变化。Visual Studio 2012为用户提供了新的模板、设计工具以及测试盒调试工具,让用户在尽可能短的时间里构建出具有强大吸引力的应用程序所需的一切。打开软件,就能看到整个界面经过了重新设计,简化了工作流程,简化了工具栏,减少了选项卡的混乱性,让用户能够更轻松的导航应用程序。

Visual Studio 2012新增了一些可以增进团队生产力的新功能。这些新功能包括intellitrace in production,task/suspend resume,代码检阅功能,powerpoint storyboarding 工具。这些新添加的功能对于程序员使用Visual Studio 2012来进行开发提供了方便,使得程序员在调试程序的时候更加便捷。

图1 Visual Studio 2012 界面

Visual Studio 2012还给用户提供了一款可视化工具集——Blend for Visual Studio,Blend是一种为HTML和XAML应用程序设计用户界面的工具。这个版本特别针对以Windows 8为目标的Windows Store应用程序。在Blend for Visual Studio 2012中新增了对可视化HTML(visual HTML)和CSS授权(CSS authoring)的支持,并且XAML设计器也作出更新,增加了针对Modern-UI(以前叫做Metro)的特性。运用Blend可以给予用户便捷的操作来获得全新而美观的界面。同时,

图2 Blend for Visual Studio 界面

Visual Studio 2012拥有全新的外观,给予用户全新的感受。在Blend中,用户可以再美工板上绘制形状、路径和控件,然后修改其外观和行为,从而直观的设计应用程序。用户还可以导入图像、视频和声音等。同时在处理应用程序的时候,

用户可以随时使用编程人员正在处理的代码隐藏文件或者自定义控件文件来更

新用户的项目。

3.2 开发语言的选择(C#+XAML+XML)

本次设计采用了时下流行的C#+XAML联合开发模式,同时将数据保存在XML文件中,方便读取。

C#(C sharp)是微软公司发布的一种面向对象的高级程序设计语言,是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。C#继承C和C++的强大功能的同时去掉了一些它们复杂的特性(比如没有宏以及不允许多重继承)。C#还综合了VB简单的可视化操作和C++的高运行效率,以及它强大的操作能力、优雅的语法风格、创新的语言特性。C#看起来和Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同[3]。

XAML(eXtensible Application Markup Language),中文名称可扩展应用程序标记语言,中文发音“Zamel”,是微软公司为了构建应用程序用户界面而创建的一种新的语言。XAML是一种解释性的语言,它可以被编译,提供了一种便于扩展和定位的语法定义和程序逻辑分离的用户界面。XAML语言的有点特别明显,就是简化编程式上的用户创建过程,应用时要添加代码等等。XAML不是一种设计语言,而是一种纯正的、用来描述用户界面构成元件和编排方式的标记语言。

Extensible Markup Language(可扩展标记语言,简称XML),它是一种以简单文本格式存储数据的方式,是Internet上传输数据的绝佳格式。XML元素包含一个开标记(房子尖括号中的元素名称,如)、元素中数据和闭标记(与开标记相同,但是在左括号后有一个斜线:)。XML主要用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种可以让用户自己对自己的标记语言进行定义的源语言。本程序中使用的数据文件的格式就是XML。

3.3 界面的选择(Windows UI)

Windows UI(旧名Metro UI、Modern UI、Windows 8-style UI),是微软的一种基于排版的设计语言和格式。Windows UI的设计风格最早源于瑞士平面设计。Windows UI的设计理念是由最核心的五个原则组成,它们是:简洁与快速、注重排版和布局、内容重于形式、生动而有灵魂、返璞归真。Windows UI的哲学是“化繁为简”富有创意的进行排版,去掉装饰物,让版面自己说话。

Windows UI设计准则:内容重于形式、快速而流畅、支持多任务、正确使用合约、动态磁贴、漫游设置到云端。

3.4 Visual Studio的部分文件

在创建项目的时候,Visual Studio创建项目文件并在“解决方案资源管理器”中显示这些文件。空白应用程序模板所创建的文件如下表所示[4]:

表1 创建项目文件表

文件名称描述

Properties/Assemblyinfo(.vb or .vs) 包含嵌入所生成的集合中的名称和版本元数据

Package.appxmanifest 包含描述用户的应用的元数据,包括现实名称、说明、徽标

和功能

Assets/* 用户可以替换的默认徽标和初始屏幕图像Commom/LayoutAwarePage 具有能够适应不同布局和视图的页面功能的基类

Commom/RichTextColumns 具有用语在列中部署的多格式文本的功能的基类

Commom/StandardStyles.xaml 包含用户的默认样式和模板

App.xaml,App.xaml.*(.vb, .cs) 指定用户级逻辑,显示用户界面需要使用应用类BlankPage.xaml 用于创建用户界面的默认起始页BlankPage.xaml.*(.vb, .cs) 包含默认起始页的逻辑的代码隐藏文件

3.5 Visual Studio 2012页面模板的集合

本次设计中使用了很多页面来进行相关信息的录入和显示,为了方便用户的操作,Visual Studio 2012提供了不少页面模板可供用户选择。如下表所示:

表2 页面模板集合表

页面类型描述

组详细信息页面显示单个组的详细信息以及组中每个项目的预览

分组信息页面显示分组的集合

项目详细信息页面详细显示一个项目,并允许导航到相邻的项目项目页面显示项目的集合

拆分页面显示项目的列表以及所选项目的详细信息

基本页面可以适应不同方向和视图的空白页面,并且包含一个标题和返回按钮

空白页面用于Windows商店应用的空白页面

4 个人生活小助手设计的实现

4.1 系统的总体架构

整个个人生活小助手分为三个模块:日程管理模块、闹钟提醒模块、网络分享模块。日程管理模块包含新建日程和日程列表两个部分,新建日程包含六个项目可供填写,在保存新建成功后,即可在日程列表显示,同时可对日程列表进行删除和修改操作;闹钟提醒模块既是一个闹钟提醒功能,在判断时间和优先级后对事件进行提醒;网络分享模块既是可以将个人生活小助手通过微博、skydrive、邮件等形式进行分享。

系统的功能模块图如下所示:

图3 系统的功能模块图

4.2 绑定图片的实现

在Visual Studio 2012中,绑定图片的方法有两种,一种是直接绑定在XAML 文件中,另外一种就是本文提到数据绑定的方法,其原理框图如下图所示:

图4 绑定图片原理图

以Edit_Itinerary 这个界面为例

步骤一:在这个页面的.xaml 文件中绑定具体的数据结构体; Edit_Itinerary.xaml 文件中所涉及的关键代码如下:

x:Name="itemsViewSource" Source="{Binding Items}"

d:Source="{Binding AllGroups[2].Items, Source={d:DesignInstance

Type=data:MyDataSource, IsDesignTimeCreatable=True}}"/>

这里的AllGroups[2]是来自于MyDataSource 这个类里边的,绑定的AllGroups[2].Items 以便后续的操作。

步骤二:通过具体的控件来绑定该结构体的Image 函数,并在Common/StandardStyles.xaml 中调用相应的模板;

Edit_Itinerary.xaml 文件中所涉及的关键代码如下:

......

相关页面的.xaml 文件绑定具体数据结构体

通过具体的控件来绑定该结构体的Image

函数

执行Image 函数,该函数

SampleDataSource.cs

个人生活小助手设计

日程管理模块

闹钟提醒模块

网络分享模块

ItemsSource="{Binding Source={StaticResource itemsViewSource}}"

ItemTemplate="{StaticResource Standard2525ItemTemplate}"

......

Standard2525ItemTemplate该模板是Visual Studio 2012系统自己建立的模板,其关键绑定图片的代码如下:

Stretch="UniformToFill"

https://www.doczj.com/doc/d58185174.html,="{Binding Title}"/>//绑定Image函数

步骤三:在SampleDataSource.cs中执行Image函数,解析图片路径,将图片画在gridview上面.

在SampleDataSource.cs中所执行的代码如下:

private ImageSource _image = null;

private String _imagePath = null;

//将_image和_imagePath置空,方便后边重新赋值

public ImageSource Image

{

get

{

if (this._image == null && this._imagePath != null)

//判断图片为空,同时图片路径不为空

{

this._image = new BitmapImage(new

Uri(SampleDataCommon._baseUri, this._imagePath));

//将图片赋值为解析图片路径得到的图片

}

return this._image;

}

set

{

this._imagePath = null;

this.SetProperty(ref this._image, value);//重新赋值

}

}

由于Edit_Itinerary.xaml绑定的是MyDataSource类型的group2,在解析图片的路径的时候,this._imagePath应该是group2中每一个Item的imagePath,这样就将group2中每一个Item的图片画在gridview上面[5]。

之所以选择这种方法而不选择直接绑定在XAML文件中是因为由于本文中添加Item的图片比较频繁,通过数据绑定这种方式更加有效,快捷。

4.3 数据文件的读写

本次程序中所有的数据文件都是采用XML的形式,XML文件在Visual Studio 2012的C# Win8商店应用的读写方式为;

第一步:读取XML文件的目录,如果存在直接读取,否则新创建一个XML 文件目录其关键代码如下:

StorageFolder storageFolder = await

ApplicationData.Current.LocalFolder.CreateFolderAsync("UserInputData",

CreationCollisionOption.OpenIfExists);

//创建文件目录UserInputData,如果该目录不存在的话。

StorageFile storageFile = await storageFolder.CreateFileAsync("data.xml",

CreationCollisionOption.OpenIfExists);// storageFolder目录下打开

第二步:对加载XML文件进行设置,其关键代码如下:

Windows.Data.Xml.Dom.XmlLoadSettings xmlloadsettings = new XmlLoadSettings();

//新建Setting设置。

xmlloadsettings.ProhibitDtd = false;

//true 禁止在XML DOM 文档中包括DTD;false允许包括。默认值为true。

xmlloadsettings.ResolveExternals = false;

// 如果外部定义、可解析命名空间、DTD 的外部子集和外部实体引用在分析文档时解//析,则为true;否则为false。默认值为false。

xmlloadsettings.ElementContentWhiteSpace = true;

// 如果默认处理保留空白,则为true;否则为false。默认值为false。

第三步:以IO的形式对XML文件进行数据的读取,如果存在数据则进行XML文件的读写,在写文件的时候如果没有数据就新建根节点然后进行数据的读写,在读文件时如果没有数据就退出,其关键代码如下:

var content = await FileIO.ReadTextAsync(storageFile);

//将xml 文件的数据以IO 流的方式读去到content 中. if (!string.IsNullOrEmpty(content))

//判断content 是否为空,如果为空,说明没有读到数据,否则就对数据进行操作。 { //判断语句

}

第四步:执行完相应的读写操作过后,保存文件,在保存时要注意在开发Windows 8 时程序只能对有权限操作的目录下的文件进行读写操作以及保存;对没有权限操作目录的文件可以进行读操作,不能进行写操作,除非程序申请到权限。

所以在本次设计中为了将数据文件保存有权限操作的目录下通过文件的复制将数据保存在了没有操作权限的目录下,其关键代码如下:

await xmlDoc.SaveToFileAsync(storageFile); //保存读写后的文件

Windows.Storage.StorageFolder storageFolder1 = await

Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsyn c ("Assets"); await storageFile.CopyAsync(storageFolder1, "data.xml", NameCollisionOption.ReplaceExisting);

//windows8 的商店应用不能再应用程序本地目录以外的文件进行修改,所以只能通过

//复制替换的方式,实现对文件修改的效果。

4.4 初始界面的设计与实现

整个初始界面包含两个部分即新建日程(New Itinerary )和日程列表(Itinerary List )。

初始页面设计流图如下所示:

图5初始页面流图

N Y XAML 绑定数据代码进入主程序 判断是否有日程

将日程信息显示在初始界面 显示初始界面

初始界面效果如下图所示:

图6初始界面图

protected override void LoadState(Object navigationParameter,

Dictionary pageState)

{

// TODO: 创建适用于问题域的合适数据模型以替换示例数据

var sampleDataGroups =

SampleDataSource.GetGroups((String)navigationParameter);

this.DefaultViewModel["Groups"] = sampleDataGroups;

}

与所有的loadState()函数功能相同,主要是加载这个页面的所有信息,同时存储这个页面的信息,方便GoBack()函数的执行。系统从SampleDataSource 中获取对应的内容,因而调用了SampleDataSource.Getgroups()。

系统会对已经设定的日程数量进行判定:

if (temp.Items.Count <= 0)

{

return;

}

else

{

this.Frame.Navigate(typeof(Itinerary_List),

((SampleDataGroup)group).UniqueId);

}

如果系统中没有已经设定的日程,则这个界面中仅有New Itinerary一项,反之若有已经设定的日程,那么则会在该页面显示New Itinerary和Itinerary List两项。

4.5 日程管理模块的设计与实现

4.5.1 日程管理模块设计流图

整个日程管理模块主要包含了新建日程、修改日程和删除日程,其设计流程图如下所示:

图7日程管理模块流图

4.5.2 新建日程功能

New Itinerary 里边包含六个子功能分别是Title 、Time 、Priority 、Type 、Location 、Description ,在这六个子功能中可以进行Title 的编写,Time 的选择,Priority 的选择,Type 的选择,Location 以及Description 的编写,在新建日程界面,用户可以将日程的具体信息在这里进行录入、选择和保存。

其功能模块如下图所示:

图8 新建事务功能模块图

提示失败返回日程列表

提示成功返回初始页面

Y N

N Y Y N N 初始页面

新建日程 日程列表

修改日程 删除日程

保存 保存

Check

Check Check

提示成功返回初始页面 提示失败返回新建日程 Check

显示下一个日程

返回初始页面

返回日程

列表 New Itinerary

Meeting Others Appointment

Birthday Study Medium Low

High Description

Location Time Title Priority Type

新建日程流图如下所示:

图9 新建日程流图

页面效果图如下所示:

图10 New Itinerary 页面图

调用LoadState ()函数,加载这个页面的信息,系统中定义了一个PP 控件,相当于一个缓存一样,每当用户点击其中一个项目进行编辑时,就会在屏幕的左边弹出一个方框,该方框就是一个popup 控件,pp 用来表示其中的任何一个控件,通过下面这段语句来实现pp = popupxx as Popup

Popup pp = null ;

而对于用户单击其中任何一个因素进行处理,系统中采用了这样的语句;

void ItemView_ItemClick(object sender, ItemClickEventArgs e)

{

// 导航至相应的目标页,并通过将所需信息作为导航参数传入来配置新页

var itemId = ((SampleDataItem)e.ClickedItem).UniqueId;

//对于myDataSource 里面一个group 中UniqueId 用来标示其是哪一个因素,例如

//"Group-2-Item-1"就标示title , "Group-2-Item-2"就标示type 等等

LoadState ()加载页面信息

用switch case 对点击进行选择

调用PP 控件,显示相应的编辑窗口 主要因素编辑完成后返回主页面

var group = MyDataSource.GetGroup("Group-2");

this.Frame.Navigate(typeof(ItemDetailPage), itemId);

switch (itemId)

{

case "Group-2-Item-1":

pp = popupTitle as Popup;

TitleBox.Text = group.Items.ElementAt(0).Time;

id = "title";

break;

}

}

对于MyDataSource里面一个group中UniqueId用来标示其是哪一个因素,例如"Group-2-Item-1"就标示title,"Group-2-Item-2"就标示type等。而对于每个因素的操作,本设计中采取了switch case语句进行选择,对每一项进行操作。同时采取异步的方式显示系统的对话框,以达到程序执行效率更高的目的[6]。

async void newMessage(string content, string label1, string label2)

{

MessageDialog messageDialog = new MessageDialog(content);

https://www.doczj.com/doc/d58185174.html,mands.Add(new UICommand(label1, new

UICommandInvokedHandler(https://www.doczj.com/doc/d58185174.html,mandInvokedHandler)));

https://www.doczj.com/doc/d58185174.html,mands.Add(new UICommand(label2, new

UICommandInvokedHandler(https://www.doczj.com/doc/d58185174.html,mandInvokedHandler)));

messageDialog.DefaultCommandIndex = 0;

messageDialog.CancelCommandIndex = 1;

await messageDialog.ShowAsync();

}

在输入title之后点击check按钮执行函数Check_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e),用来检测输入的title是否是原来的数据中存在的,如果存在,就提醒用户重写。在基本信息输入完成后点击右键调用CommandInvokedHandler(IUICommand command)函数通过bottombar控件,显示save按钮,让用户界面更加简洁。点击save按钮后,程序就会对这些输入的数据进行审核,如果主要的因素已经输入(主要因素包含Title、Time、Priority、Type),

将会加入到全局变量data里面,然后调用writexmlfile()函数进一步写入data.xml文件中来实现数据的保存。若是未将关键信息录入,则程序将在用户右键点击想要保存的时候给以警告,告知用户关键信息未录入将不能保存,在函数CanBack()中会对其进行判定以及提醒。

if(group.Items.ElementAt(0).Time.Length == 0 ||

group.Items.ElementAt(1).Time.Length == 0 ||

group.Items.ElementAt(2).Time.Length == 0 ||

group.Items.ElementAt(4).Time.Length == 0)

{

MessageDialog messageDialog = new MessageDialog("If the several key options

are blank, this Itinerary will not be saved!", "Warning");

//设置将调用默认的命令

messageDialog.DefaultCommandIndex = 0;

// 当溢出时要调用设置命令

messageDialog.CancelCommandIndex = 1;

// 显示对话消息框

var commandChosen = await messageDialog.ShowAsync();

}

如果新建日程成功保存则在Itinerary management\Itinerary

management\Itinerary management\bin\Release\AppX\Assets下可以找到data.xml 的文件,其代码如下所示:

//一级节点

//二级节点

1//1是uniqueId的属性

ddd //ddd是输入的Title,此处是title的属性

//此处是输入的时间,time的属性

//Location不是主要因素,此处未设置

birthday //此处是输入类别,type的属性

Assets/birthday.jpg //此处是图片地址

medium //此处是优先级

//描述不是主要因素,此处未设置

4.5.3 日程列表管理与日程搜索功能设计

日程列表里边主要包含了已经设定好的日程,将其按序排列生成相关的界面,其界面效果图如下所示:

图11 Itinerary List 页面图

而日程搜索功能是运用Windows 8的搜索功能,在已经设定好的日程中查找相应的日程,将查找到的日程直观的显示出来。

页面的实现是通过调用LayoutAwarePage.cs中的LoadState函数,加载所指向页面的所有信息:

protected override void LoadState(Object navigationParameter, Dictionary pageState)

{

// TODO: 创建适用于问题域的合适数据模型以替换示例数据

bool IsSearch = (bool)navigationParameter;

if (IsSearch == false)//如果不是经搜索查看日程则加载日程列表界面

{

var group = SampleDataSource.GetGroup("Group-2");

this.DefaultViewModel["Group"] = group;

this.DefaultViewModel["Items"] = group.Items;

}

else//如果是经过搜索来查看日程,则加载搜索日程界面

{

var group = SampleDataSource.GetGroup3(Itinerary_List.SearchItem);

this.DefaultViewModel["Group"] = group;

this.DefaultViewModel["Items"] = group.Items;

this.pageTitle_Copy.Text = "Result for \"" + Itinerary_List.SearchItem +

"\"";

}

}

搜索界面效果如下所示:

图12日程搜索页面图

添加搜索的步骤如下:

第一步:将此 using 语句添加到文件顶部以引用示例数据类:using SearchContractExample.Data;

第二步:添加属性:

public Dictionary> Results { get; set; }

第三步:通过替换:

// TODO: Application-specific searching logic. The search process is responsible

// for creating a list of user-selectable result categories:

// filterList.Add(new Filter("", ));

// Only the first filter, typically "All", should pass true as a third argument

// in order to start in an active state. Results for the active filter are

// provided in Filter_SelectionChanged below.

var filterList = new List();

filterList.Add(new Filter("All", 0, true));

来更新第一个TODO注释,替换为:

var filterList = new List();

var totalMatchingItems = 0;

Results = new Dictionary>();

foreach (var group in SampleDataSource.GetGroups("AllGroups"))

{

var matchingItems = group.Items.Where(item =>

item.Title.Contains(queryText));

int numberOfMatchingItems = matchingItems.Count();

if (numberOfMatchingItems > 0)

{

Results.Add(group.Title, matchingItems);

filterList.Add(new Filter(group.Title, numberOfMatchingItems));

}

}

filterList.Insert(0, new Filter("All", totalMatchingItems, true));

第四步:通过替换

// TODO: Respond to the change in active filter by setting

// this.DefaultViewModel["Results"] to a collection of items with bindable

// Image, Title, Subtitle, and Description properties

来更新下一个TODO注释,替换为

if (https://www.doczj.com/doc/d58185174.html,.Equals("All"))

{

var tempResults = new List();

foreach (var group in Results)

tempResults.AddRange(group.Value);

this.DefaultViewModel["Results"] = tempResults;

}

else if (Results.ContainsKey(https://www.doczj.com/doc/d58185174.html,))

this.DefaultViewModel["Results"] =

new List(Results[https://www.doczj.com/doc/d58185174.html,]);

为了响应搜索,还需要将以下代码添加到事件处理程序之中:

private void ItemClick(object sender, ItemClickEventArgs e)

{

var itemId = ((SampleDataItem)e.ClickedItem).UniqueId;

this.Frame.Navigate(typeof(ItemDetailPage), itemId);

}

在返回的时候,调用LayoutAwarePage.cs中的相应部分即可进行操作,同时在LayoutAwarePage.cs中还有系统自带的其他跳转(返回最顶层页,返回上一页)。在本次设计中,只用到返回上一页

protected virtual void GoBack(object sender, RoutedEventArgs e)

{

// 使用导航框架返回上一页

if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();

}

相关主题
文本预览
相关文档 最新文档