这里在Windows Phone中实现一个简单的记事本程序。
目标:
1、能够使用手指在页面上随意记录下信息。
2、能够实现 添加 、删除页,能够翻到上一页、下一页。
3、能够修改画布的背景色、画笔的粗细。
4、自动保存页面信息,并且能够保存记事本的相关状态信息。
大致效果如图所示:
下面是简单的实现过程
首先是绘制界面:
最主要的是InkPresenter这个控件,关于这个控件可以看一下我的另一篇文章:http://www.cnblogs.com/yinghuochong/archive/2011/09/13/2175285.html
这里添加了一个Rectangle 主要是为了给InkPresenter绘制一个边框效果。
然后是需要添加ApplicationBar,用来控制记事本的设置。Xaml大致代码如下:
接着就是定义一个配置文件了,因为当页面从墓碑化中唤醒,或者重新启动的时候都要将记事本和上次关闭的时候尽量保持一致,这样能有更好的体验。
添加类NoteBookSettings 该类的属性主要有:
List<StrokeCollection> StrokeCollections 用来保存所有的线条 每页的线条用一个StrokeColeection表示;List中的每一项表示一页的线条;
int PageNum 表示记事本当前的页码
Color Forground 记事本的前景色
Color Background 记事本的背景色
int StrokeWidth 画笔线条的宽度。这里本来想定义一个DrawingAttributes类型的属性,这样可以设置不同的画笔样式,但是当背景颜色改变的时候就不好控制了,所以如果不改变背景颜色的话这里可以定义成DrawingAttributes类型 ,然后在主页面中通过设置其宽度和颜色可以实现 荧光笔,标记笔的效果。
然后定义一个Save()方法和一个Load()方法 将配置信息序列化后保存在隔离存储空间中或者将配置信息从文件中反序列化出来,这个就很简单了。
NoteBookSettings类的代码如下:
然后需要配置App.xaml.cs文件,当程序启动或激活时加载配置文件,退出或墓碑化时保存配置文件。
只需在App.xaml.cs中定义一个NoteBookSettings对象: public NoteBookSettings Settings{get;set;}
然后在Application_Launching 和Application_Activated 的时候加载配置信息:Settings = NoteBookSettings.Load();
在Application_Deactivated和Application_Closing的时候保存配置信息:Settings.Save();
下面开始功能的实现:
首先从App中获取配置信息,并且定义一个活动线条的哈希表,定义这个哈希表的原因主要是:因为我们可能使用多个手指在InkPresenter上移动,而我们在InkPresenter中呈现线段是根据用户手指经过的每个点将其加入到线条中最终形成一个完整的线条形成的,这个时候我们需要区分这些点分别是哪个手指触发的,并且应该属于哪条线。而TouchDevice会有一个Id属性用来标志每个手指,这样我们就能通过这个Id来找到每个手指操作的这条线段,我们将其加入到激活线段中,然后就能控制每条线条了,当操作结束将其从哈希表中删除,这样就正常了。
在构造函数中根据配置信息中记录的 当前页面页码 将当前页面的线条恢复,并且恢复其他配置信息。
这里用到了pageNumAndAppBarUpdate方法,该方法用来更新标题页码信息和菜单信息。该方法代码如下:
构造函数如下:
构造函数中要为页面注册FrameReported事件,不然就不能收集手指的输入了,该事件处理函数是该程序关键代码,事件的事件处理如下:
这样就可以在页面中画东西了。
下面是实现添加页面,前后翻页,删除页面,这几个都是使用ApplicationBar控制的,几个处理函数如下:
还有最后一个就是背景色的切换和 画笔粗细的设置,都很简单,处理函数如下:
OK,这就基本上Ok了,截两张图看看:
这里实现功能还不够完善,还有些内容比如橡皮擦什么的还有待添加。
参考资料Programing Windows Phone 7。