修炼九阴真经Windows Phone开发 (16):Tip与技巧
在blend 中,右击PhoneApplicationPage ,可以添加ApplicationBarIconButton 。在IconUri 下拉列表中选择所需的按钮图标。
在blend 中,右键文本控件,选择 编辑样式,再单击“应用资源”,可以选择系统内置的样式。
可以右键一个控件,在弹出的快捷菜单中选择“导航到”项目中的一个页面。
TextBox 可以指定 InputScope 属性来指定用户要输入的数据的类型,手机屏幕会显示不同的软件盘。System.Windows.Input命名空间下的 InputScopeNameValue 枚举中定义了所有可以设置的InputScope属性。
<Application
x:Class="PhoneApp7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
<!--应用程序资源-->
<Application.Resources>
</Application.Resources>
<Application.ApplicationLifetimeObjects>
<!--处理应用程序的生存期事件所需的对象-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
</Application>
这是app.xaml代码,主要功能是初始化了 Application的 ApplicationLifetimeObject 属性,创建了一个 PhoneApplicationService对象。 PhoneApplicationService类提供了应用程序不同生命阶段的访问功能,包含了对应用程序处于空闲状态的管理,也包含了当应用程序处于有效或无效状态时的管理。
Application 类的 RootFrame 属性是标识应用程序的启动页面。所有的Winphone应用程序都 有一个顶层的窗口设计元素,它的数据类型是 PhoneApplicationFrame 。这个框架
承载一个或多个用来标识应用程序内容的 PhoneApplicationPage元素,同时它还用来处理不同页面之间的导航切换。
开发者可以在SL应用中处理三种不同的 Manipulation事件,来实现 对单点和多点触摸的响应,达到移动和缩放对象的目的。这三种事件如下:
1 \ ManipulationStarted:用户一个或多个手指触摸屏幕会触发这个事件。
2、ManipulationDelta: 用户一个或多个手指在屏幕上移动时会反复触发这个事件。
3、ManipulationCompleted: 用户一个或多个手指离开屏幕时会触发这个事件。
技巧:在模拟器中调试应用程序时可以使用计算机键盘进行输入,使用 Pause/Break 键或 PageUp/PageDown 键可以在屏虚拟键盘和计算机键盘间进行切换。当输入切换到计算机键盘后,手机的回退,开始,搜索三个按键分别用 F1,F2,F3模拟。
在应用程序瞬间转为后台时,会进入休眠状态,应用程序的状态可被开发者保存到 Microsoft.Phone.Shell 命名空间下 PhoneApplicationService 类的 State成员属性中。当应用程序休眠时, State中的瞬间状态被操作系统保存到内存。当休眠的应用程序复苏时,操作系统会将State中的内容恢复到休眠前的状态。State 的内容一直被保存在内存中,所以存取速度比存储独立外存中的永久性数据快得多。然而 State 中的瞬间状态只在应用程序休眠时才有效。一旦休眠的应用程序被关闭或新实例被启动, State 中将不同包含任何数据。如果休眠程序占用了系统需要的资源,则这个休眠的应用程序会关闭, State中保存的瞬间状态也被释放 。
WP7 应用程序生命周期:启动(Launching)、结束(Closing)、暂停(Deactivated)、激活(Activated)。它们都是 PhoneApplicationSerrvie类的成员。
1、Launching: 在处理这个事件时,注意不应该从独立存储读所有永久数据。因为系统在处理完这个事件之后才在屏幕上显示应用程序首页。合理的方法是在启动时只读取显示首页用到的永久数据,待应用程序启动后以异步方式装载其他永久数据。
处理Launching事件时,开发者不应该恢复应用程序过去实例的瞬间状态。应用程序一旦被启动,用户的体验应该是一个从头开始的实例。
2、Closing,处理这个事件时,开发者应该把所有的永久数据保存到独立存储中。处理Closing时,开发都没有必要保存当前实例的瞬间状态,也就是那些只和本次运行相关的信息。
3、Deactivated 应用程序进行休眠状态。处理这个事件时,应该把程序的瞬间状态完全保存到PhoneApplicationService 类的 State 属性里。在必要时恢复这些瞬间状态。在处理这个事件时,也应该把应用程序的永久性数据保存到 独立存储中。否则当被暂停的应用程序不同被激活而被重新启动时,永久数据不会丢失。处理这个事件所有操作要在10秒内完成,否则OS就终止应用程序。
4、Activate 当一个应用程序被暂停和休眠后,这个应用程序可能再也不被激活。这可能是因为用户从首页启动一个应用程序的新实例。处理这个事件时,应该从PhoneApplicationService 类的State属性中读取程序的瞬间状态。同时也要注意不应该在这个事件中去读取独立存储的数据。
有时候,我们还要保存休眠前的导航的用户界面,PhoneApplicationPage类的 OnNavigatedTo 和 OnNavigatedFrom 成员事件可以用来实现 这个操作。简单地说,开发者只要在 OnNavigatedFrom中保存用户界面,并在OnNavigatedTo中恢复用户界面。
推送通知有三种: 瓷砖通知(Tile),弹出通知Toast,原生通知Raw