Windows Phone 可以支持5个墓碑化(Tombstoning)应用程序,第三方开发的应用程序只能使用最后一个墓碑空间,最新的墓碑化应用程序会自动替换前一个程序。我们可以利用墓碑化功能暂时保存应用程序当前状态,如果用户有意或无意触碰了手机Home 按键,并再次点击Back 按键时应用程序会从墓碑化状态激活并返回最后应用程序状态。
在开发墓碑化应用程序时,我们可以使用两种数据存储方式:应用程序状态(Application State)、页面状态(Page State),这两种方式最大的区别在于数据存储和使用范围不同,应用程序状态通过PhoneApplicationService.State 属性可存储所有应用程序页面的数据,并不局限于某一个页面,不同的页面可以通过PhoneApplicationService.State 来获取相关的数据。页面状态使用PhoneApplicationPage.State 属性针对的是单独页面的数据内容,当用户点击Back 按键返回时,系统将返回用户之前看到的页面信息。需要注意的是这些存储都是暂时性的,如果应用程序需要永久的数据存储,还应当使用独立存储(IsolatedStorage)方式,具体可参考《WP7 应用数据存储IsolatedStorage 篇》。
下面我们来做一个简单的实例应用,新建一个Windows Phone 项目,加入TextBox 控件。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel Orientation="Vertical">
<TextBlock Text="Input text here:"/>
<TextBox x:Name="testTextBox" Height="70"/>
</StackPanel>
</Grid>
在存储页面数据时我们需要使用OnNavigatedFrom 和OnNavigatedTo 方法,当用户离开某页面时将会启动该页面的OnNavigatedFrom 方法,当转向某页面时将执行该页面的OnNavigatedTo 方法。在使用上述方法时需要增加System.Windows.Navigation 命名空间。
首先我们来编写OnNavigatedFrom 方法的内容,当用户离开MainPage 页面后,将testTextBox 中填写的内容保存到textVal 键。此处使用的是PhoneApplicationPage.State 方式进行存储。
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
State["textVal"] = testTextBox.Text;
base.OnNavigatedFrom(e);
}
接下来继续编写OnNavigatedTo 方法,当用户点击Back 按键返回MainPage页面,将恢复之前testTextBox 填写的内容。通过State.TryGetValue 方法即可获得之前保存到textVal 键中的值。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
object textObj;
if (State.TryGetValue("textVal", out textObj))
{
testTextBox.Text = textObj.ToString();
}
base.OnNavigatedTo(e);
}
如果这个TextBox 的内容将用于整个应用程序,任何页面都能够访问到这个数据,则需要使用PhoneApplicationService.State 方法。在程序中增加Microsoft.Phone.Shell 命名空间,将程序稍微调整如下。
PhoneApplicationService service = PhoneApplicationService.Current;
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
service.State["textVal"] = testTextBox.Text;
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
object textObj;
if (service.State.TryGetValue("textVal", out textObj))
{
testTextBox.Text = textObj.ToString();
}
base.OnNavigatedTo(e);
}
如果需要在非MainPage 页面获取textTextBox 内的值,可直接在该页面增加OnNavigatedTo 方法读取textVal 键值。通过以上两种方式就能够将应用程序当前状态进行墓碑化操作,方便使用者恢复程序之前的状态。
效果图
录入文字;点击Home 键转到首页:
![T1](https://i-blog.csdnimg.cn/blog_migrate/69875b6c1bef97cf5bf4ea40ab39fa3c.png)
![T2](https://i-blog.csdnimg.cn/blog_migrate/a8549e2414b475645af1e481420168d0.png)
点击Back 按键,系统将恢复之前输入的文字:
![T3](https://i-blog.csdnimg.cn/blog_migrate/bd238126ca55455eb8febfbcfeb62ef7.png)
![T4](https://i-blog.csdnimg.cn/blog_migrate/1f7210dc5f16ac888779fdb97c96dda6.png)
相关资料
Running your app in the background (tombstoning)
How to: Preserve and Restore Page State for Windows Phone
本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2011/06/13/wp7-tombstoning.html,如需转载请自行联系原作者