《101 Windows Phone 7 Apps》读书笔记-NOTEPAD

课程内容

Ø 读写文件

    Notepad提供了快速、高效的记录手段,它具有以下的特点:

Ø 自动保存,使得速记变得快速而简单。

Ø 提供每条笔记的快速预览。

Ø 可自定义每条笔记的背景色、前景色和字体大小。

Ø 可通过Email发送笔记文件。

    这听上去熟悉吗?应该够熟悉吧,因为对于用户来说,除了主密码和相关的加密算法,这个应用与之前的Passwords & Secrets几乎如出一辙。但是,在实现过程中,有一个不同之处显得非常重要,这也正是本章需要讲述的。因为Notepad存储的记录相对于Passwords & Secrets来说,需要更加长久一点。每条记录都以独立文件的形式存放在隔离存储空间中,这使得应用程序可以根据需求加载记录,而非每次在应用程序启动/激活时全部加载(在应用程序设置中是这样的)。

    本章突出Notepad与Passwords & Secrets应用程序中代码之间的差异,展示共同使用的设置页面的设计。

The Main Page

    Notepad的主页面和之前Passwords & Secrets的主页面很像,只是少了LoginControl这个自定义空间和相关的逻辑。一开始,应用程序栏就具有一个“new”按钮,因为任何情况下,都可以增加新的记录。

注意:

➔在OnNavigatedTo中,通过把页面的数据内容设置为记录列表,完成了list box的数据填充。

➔本章最后讲述的Note类,为了适应以文件为基础的存储方式,与上一章的略微有所不同。在NewButton_Click事件处理程序中,我们可以发现它现在具有Filename属性,它被用来指向包含数据的文件。在应用程序的界面中,文件名是不会出现的;从内部来讲,每条记录只要知道去哪里获取数据就可以了。因此,在创建一条新记录时,它被赋予一个唯一的文件名,这要归功于Guid.NewGuid方法,它为所有的实际需求返回全局唯一标识符(GUID)。

The Details Page

Details页面和Passwords & Secrets一样,显示记录的内容,允许用户对其进行编辑、删除操作,改变设置,或者通过Email发送记录内容。除了应用程序栏的IsVisible属性设置为False之外,该页面的XAML代码与前一章的DetailsPage.xaml相同,因为LoginControl显示的时候,它没有必要隐藏。

注意:

➔ 在OnNavigatedFrom函数中,text box中的内容通过SaveContent方法保存到一个文件中,这会在本章后面进行详述。每条记录的Title属性是在这个时候进行设置的,而并不是在获取时动态设置的,因为这样做可以不用读取每个文件来显示每个title的值。否则的话,把列表内容保留在主页面会导致应用程序需要每个文件的内容,并且丧失了将记录存放于文件的优势。

➔ 归功于Note类中定义的GetContent方法,记录的内容会在OnNavigatedTo函数中立即显示。

➔ 在DeleteButton_Click函数中,DeleteContent方法确保记录被删除时,其存储的文件也同时被删除。

The Note Class

➔ 之前提及过,Title属性目前是普通的read-write属性,是动态可变的,而非read-only。

➔ 为保存一个新的文件,SaveContent方法首先调用IsolatedStorageFile. GetUserStoreForApplication。这是在任何代码中直接与隔离存储空间文件系统交互的第一步。IsolatedStoreFile返回的实例中包含创建、枚举、打开和删除文件及文件夹的方法。CreateFile方法一旦被调用,SaveContent就会使用StreamWriter把传入的字符串写入stream中。

➔ GetContent 和 DeleteContent与SaveContent类似,利用了IsolatedStorageFile中的另外三个方法:FileExists, OpenFile, 和 DeleteFile。为了在读写大文件的时候,保持用户界面的可交互性,可以使用第11章“XAML Editor”中介绍的BackgroundWorker。

➔ 在管理文件时,我们有可能使用IsolatedStorageFile.GetFileNames方法来枚举并显示文件,但该方法存在一些问题,比如:

➔ 隔离存储空间的API并没有包含发现创建/修改文件日期的方法。因此,通过这种方法来进行文件排序(而不使用默认的字符排序)会需要存储额外的信息(本应用存放于Note类中)。

➔ 如果我们使用隔离存储空间的应用设置,那么列表会包含一个额外的文件。这些信息会被保存在一个叫做ApplicationSettings的XML文件中,该文件位于应用程序隔离存储空间的根目录。虽然我们可以手动将其过滤掉,但不能确保将来不会有其他特殊的文件。

➔ 和Windows一样,文件名也有一定的字符限制(例如,不能包含冒号或者问号)。如果将文件名作为用户可见并可以编辑的标签,那么我们需要确保没有引入无效的字符。

The Settings Page

图22.1 设置页面展示了每条记录的设置,允许将其应用到以后新建的记录中

    设置页面如图22.1所示,允许对记录的前景色、背景色和字体大小进行自定义。虽然这些设置只应用于当前的记录(被设置为Note实例的属性),但是用户可以通过使用check box将选择的设置自动应用到以后新建的记录中。

    为了融合color picker,把一个键值直接写入隔离存储空间的应用设置中,这里使用了TempScreenColor 和 TempTextColor。然后,这些值被用于OnNavigatedTo函数的当前记录属性中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

52. Socket Server 自定义协议的简单实现 | 厚土Go学习笔记

在 Server 和 Client 通讯中,由于网络等原因很有可能会发生数据丢包的现象。如果数据确实,服务端接收的信息不完整,就会造成混乱。 我们就需要在 Se...

58290
来自专栏Golang语言社区

《GO IN ACTION》读后记录:GO的并发与并行

一、使用goroutine来运行程序 1. Go的并发与并行 Go的并发能力,是指让某个函数独立于其他函数运行的能力。当为一个函数创建goroutine时,该函...

46970
来自专栏老九学堂

编码秘籍,Java程序员必看的调试技巧

调试可以帮助我们识别和解决应用程序缺陷,老九君下面介绍的调试方法基本都是通用的,有了下面的这些技巧在开发中会让我们在编程中事半功倍,避免浪费时间! 1.条件断点...

41560
来自专栏我的技术专栏

《Go in action》读后记录:Go的并发与并行

10230
来自专栏vue学习

10、less的引用及公共变量的抽离

less是什么自然不用多言,乃一个css预编译器,可以扩展css语言,添加功能如如允许变量(variables),混合(mixins),函数(functions...

14010
来自专栏WindCoder

MySQL数据库对象与应用-MySQL程序开发单元测验

这是微专业参加单元测试后的试题及答案整理,分享出来,供大家参考,所有标红的为答案。

12910
来自专栏破晓之歌

vue中axios处理http发送请求的示例(Post和get)

axios中文文档:https://github.com/mzabriskie/axios#using-applicationx-www-form-urlenc...

30230
来自专栏ytkah

你能用微信小程序打开小程序了【附开发方法】

  6月21日晚间,微信小程序再次迎来升级:小程序可以打开小程序了,同一个公众号下关联的10个同主体小程序和3个非同主体小程序之间,可以调用接口直接相互跳转。微...

38090
来自专栏Golang语言社区

实效go编程--4

func handle(queue chan *Request) { for r := range queue { process(r)...

370150
来自专栏逆向技术

32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址

      32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件...

39770

扫码关注云+社区

领取腾讯云代金券