退出时WP7运行方法

时间:2011-09-11 12:49:07

标签: c# .net windows-phone-7 isolatedstorage

我的WP7中有一个页面,其中包含一些文本框。按后退键时,将运行此方法以保存内容:

 protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;

        settings["remZone"] = txtBoxZone.Text;
        settings["remSpace"] = txtBoxSpace.Text;
    }

问题是有些用户不会按后退按钮,但会按主页按钮退出应用程序,因此内容不会被保存。

我认为如果可能的话,这有两个途径: 1.按下主页按钮时是否有一个运行此方法的函数,如onBackKeyPress。 2.当用户输入文本框时,是否有一种简单的方法可以保存文本框的内容?

感谢。

编辑:

解决方案是:

   protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
     {
         var settings = IsolatedStorageSettings.ApplicationSettings;

         settings["remZone"] = txtBoxZone.Text;
         settings["remSpace"] = txtBoxSpace.Text;
     }

2 个答案:

答案 0 :(得分:5)

解决问题的最简单方法是覆盖Page.OnNavigatingFrom方法。

more here

答案 1 :(得分:1)

Backpress不是您收到的唯一事件,还有一个App.Deactivated事件,只要您的应用以任何方式离开屏幕,都可以保证调用该事件。

在您的页面(.ctor或Loaded事件处理程序)中,将处理程序附加到该事件,并在该处理程序中收集在关闭时必须存储的所有内容。这是确保它不会蒸发的最简单方法。只需记住在Page.Unloaded上取消链接该处理程序,否则你将大大泄露内存/资源!!

顺便说一句。代码

var settings = IsolatedStorageSettings.ApplicationSettings;

settings["remZone"] = txtBoxZone.Text;
settings["remSpace"] = txtBoxSpace.Text;
在某些情况下

是不够的。如果您确实需要确保设置是持久的,则必须在更改后手动调用Save():

var settings = IsolatedStorageSettings.ApplicationSettings;

settings["remZone"] = txtBoxZone.Text;
settings["remSpace"] = txtBoxSpace.Text;

settings.Save(); // think about it, you may want it!

这是因为设置存储在某些特定场合,例如应用程序退出,逻辑删除等。我不记得在停用时保存它们,所以只需按Back就可以不将它们保存到ISO。更重要的是,如果您设置它们并且应用程序崩溃 - 例如由于未处理的异常 - 或者如果电池/电源关闭,或者用户只是关闭电话 - 它们将不会被存储!