《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函数的当前记录属性中。