0
回答
IsolatedStorageSettings 用法之 程序运行单击开始按钮再次启动程序还原
华为云4核8G,高性能云服务器,免费试用   

这也是刚刚学习到地知识,分享下


这个处理机制很好,有点墓碑机制的原理,区别是:

墓碑机制是在APP文件的Application_Launching、Application_Activated、Application_Deactivated、Application_Closing等方法中执行或者是在后台代码OnNavigatedFrom、OnNavigatedTo执行

而本次所讲到的是在后台代码中利用 IsolatedStorageSettings 独立存储中实现

本次实例是以TextBox为例子

首先在MainPage页面中添加个Button按钮,并给Click添加事件,跳转到新在窗体中Add.xaml

在编写Add.xaml文件前还需要对MainPage页面后台的初次加载添加判断

假如用户在Add.xaml页面编写内容后点击了开始按钮并回到开始屏幕时,然后又启动了应用程序,这时候就需要判断,用户是否保存了上次未保存地内容

首先在Loaded事件中添加如下代码

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
       //首先实例化IsolatedStorageSettings
       IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
       //定义一个变量用来存储状态信息
       string state = "";
       //检查IsolatedStorageSettings中是否存在状态信息"state"
       if (settings.Contains("state"))
       {
              //存在则读取出state状态信息到state变量中
              if (settings.TryGetValue<string>("state", out state))
              { 
                      //判断获取的状态信息是否是add  "add" 内容在后面页面中会提到
                      if (state == "add")
                      {
                             //如果读取到状态信息是add   如果是就说明用户未保存内容,则跳转到关闭前的状态页面add.xaml中
                             NavigationService.Navigate(new Uri("/ToubTest;component/Add.xaml", UriKind.Relative));
                      }
              }
       }
       IsolatedStorageTextBox.Focus();
}

下面是add.xaml页面中初始化的代码
在次之前先要定义一个全局的IsolatedStorageSettings

private IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

然后初始化中

void Add_Loaded(object sender, RoutedEventArgs e)
{
        string state = "";
        //同样判断是否包含state
        if (settings.Contains("state"))
        {
                //包含则取出state 赋值给state
                if(settings.TryGetValue<string>("state",out state))
                {
                        //如果state内容为add
                        if (state =="add")
                        {
                                string value = "";
                                //判断是否包含value
                                if (settings.Contains("value"))
                                {
                                        //取出value
                                        if (settings.TryGetValue<string>("value", out value))
                                        {
                                                //将value值显示在TextBox控件中
                                                this.AddTextBox.Text = value;
                                        }
                                }
                        }
                }
        }     
        //这段内容必须放在 判断是否包含state存在下面初始化   
        settings["state"] = "add";
        settings["value"] = AddTextBox.Text;
        AddTextBox.Focus();
        //将光标至于文字末尾
        AddTextBox.SelectionStart = AddTextBox.Text.Length;
}


在给TextBox 添加 TextChanged事件用于及时保存状态内容

private void AddTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
        settings["value"] = AddTextBox.Text;
}


最后给BackKeyPress返回按钮添加清空事件

private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
         //清空原来的state 状态内容 add
         settings["state"] = "";
}
源码下载地址:http://vdisk.weibo.com/s/6MeYw
原文链接: http://www.cnblogs.com/chihaodong/archive/2012/06/11/2545698.html
<无标签>
举报
junwong
发帖于6年前 0回/241阅
顶部