前面已经提到了,要想在程序多次运行间保存数据就必须使用独立存储。任何安装在Windows Phone 7中的程序都可以访问自身的永久磁盘存储区域,这个区域称为独立存储。下面这个项目,将轻击的总数作为临时数据,也就是作为页面状态的一部分。将背景颜色作为应用程序设置被所有实例共享。
MainPage.xaml XAML代码:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="屏幕被单击的次数为:"
Grid.Row="0"
Grid.Column="0"/>
<TextBlock Text=""
Name="txtNum"
Grid.Row="0"
Grid.Column="1"/>
</Grid>
MainPage.xaml C#代码:
namespace SilverlightIsolatedStorage
{
public partial class MainPage : PhoneApplicationPage
{
//声明全局变量
Random rand = new Random();
int numTaps = 0;
PhoneApplicationService appService = PhoneApplicationService.Current;//获取当前应用程序的PhoneApplicationService对象,用于保存临时数据
//构造函数
public MainPage()
{
InitializeComponent();
UpdatenumTaps(numTaps);//初始化单击屏幕次数
Brush brush = (Application.Current as App).BackgroundBrush;//为使用独立存储设置访问App类
if (brush != null)
{
this.ContentPanel.Background = brush;//从App类中获取BackgroundBrush属性
}
}
protected void UpdatenumTaps(int num)//定义更新单击次数的方法
{
txtNum.Text = string.Format("{0}次",num);
}
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)//重写基类Control(MainPage从它继承)的虚方法(当ManipulationStarted事件发生时调用)
{
//todo:单击屏幕时使背景颜色随机改变并将颜色保存到App类的公共属性中,然后调用UpdatenumTaps()方法使单击次数更新
SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(255,(byte)rand.Next(256),(byte)rand.Next(256),(byte)rand.Next(256)));
this.ContentPanel.Background = brush;
(Application.Current as App).BackgroundBrush = brush;//为使用独立存储,保存数据到App类
UpdatenumTaps(++numTaps);//调用方法
e.Complete();
base.OnManipulationStarted(e);//调用基类虚方法
}
//虽然程序的墓碑化恢复操作的大部分任务留给了程序自身来处理,但是通过重写OnNavigatedFrom和OnNavigatedFrom方法可以保证程序重新激活并加载正确的页面
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)//重写基类Page的虚方法(当页面离开时调用)
{
//todo:保存临时数据到PhoneApplicationService的State字典中
appService.State["numTaps"] = numTaps;
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//重写基类Page的虚方法(当页面成为框架的活动页面时调用)
{
//todo:加载numTaps
if (appService.State.ContainsKey("numTaps"))//判断是否包含该键
{
numTaps = (int)appService.State["numTaps"];
UpdatenumTaps(numTaps);
}
base.OnNavigatedTo(e);
}
}
}
效果如图:
程序退出之前 程序退出后重新启动
总结:1,如果是保存临时数据(一次执行周期之间的数据)最好使用PhoneApplicationService类保存;如果是保存应用程序设置(多次执行周期之间保存数据)最好使用独立存储IsolatedStorageSettings类保存。
2,还有一个非常容易让人迷惑的问题?在没有重写OnNavigatedFrom和OnNavigatedTo方法的情况下,程序仍然能在墓碑化恢复的时候正确地显示上次单击屏幕的次数,这是因为在Windows Phone 7中,程序的墓碑化恢复操作的大部分任务都交给了程序自身来处理。但是最好是重写这两个方法,因为这样可以保证程序重新激活时能加载正确的页面。
分类:
Windows Phone开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库