Надгробие последней посещенной страницы, на которой был пользователь - PullRequest
0 голосов
/ 03 января 2012

Я хочу захоронить последнюю страницу, на которой был пользователь, и получить ее, когда пользователь вернется в приложение. Все надгробные примеры в Интернете имеют дело с сохранением некоторых данных или состояния страницы, которую пользователь каким-либо образом отредактировал (т.е. введенный текст в текстовом поле). В моем приложении у меня нет ничего, чтобы пользователь мог изменить / отредактировать, поэтому я просто хочу сохранить последнюю посещенную страницу, на которой был пользователь. Я попытался использовать некоторые онлайн-примеры, которые использовали PhoneApplicationService.Current.State, но безуспешно.

Спасибо всем, кто хотел бы помочь мне решить эту проблему!

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Для локального хранения persistent data (данные, которые должны оставаться, даже когда пользователь закрывает приложение), вы можете использовать Изолированное хранилище .

Итак, в событии Deactivated вашего приложения вы можете записать имя страницы в изолированное хранилище следующим образом:

//You get the Isolated Storage for your app (other apps can't access it)
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();

//if the file already exists, delete it (since we're going to write a new one)
if (isf.FileExists("lastpage.txt")) isf.DeleteFile("lastpage.txt");
using (var isoFileStream = new IsolatedStorageFileStream("lastpage.txt", FileMode.OpenOrCreate, isf))
{
      //open a StreamWriter to write the file
      using (var sw = new StreamWriter(isoFileStream))
      {
           //NavigationService.CurrentSource returns the current page
           //we can write this to the file
           sw.WriteLine((Application.Current.RootVisual as PhoneApplicationFrame).CurrentSource.ToString());
       }
}

Это запишет имя текущей страницы в изолированное хранилище. Затем в методе OnNavigatedto вашей главной страницы (страница, которая сначала открывается нормально) вы можете прочитать имя файла и перейти к нему:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();

     string lastpage = string.Empty;

     if (isf.FileExists("lastpage.txt"))
     {
         using (var isoFileStream = new IsolatedStorageFileStream("lastpage.txt", FileMode.Open, isf))
         {
             //read the file using a StreamReader
             using (var sr = new StreamReader(isoFileStream))
             {
                 //get the uri we wrote and then convert it from a String to a Uri
                 lastpage = sr.ReadLine().Replace("file:///", "");

             }
          }


          (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(lastpage, UriKind.Relative));
       }
       base.OnNavigatedTo(e);
}

Это должно прочитать файл, который вы сохранили, а затем преобразовать строку в фактический URI, который вы можете передать в NavigationService.

После этого вы можете удалить текстовый файл после его прочтения, чтобы он не всегда продолжал переходить на эту страницу.

2 голосов
/ 03 января 2012

Кроме того, вы можете использовать это для получения имени страницы, string PageName = (Application.Current.RootVisual as PhoneApplicationPage).Name; для получения имени текущей страницы

1 голос
/ 04 января 2012

Хотя я согласен, что все вышеперечисленные варианты возможны, они не совсем верный способ сделать что-то в WP7.

Для правильного управления навигацией лучше создать страницу навигации в начале вашего приложения.Он также помогает управлять событиями возврата клавиш при использовании приложения и предотвращает икоты.

См. здесь один пример реализации этого: Правильный выход из WP7 на основе Silverlight

После этого воспользуйтесь советом по сохранению значений в изолированных настройках хранилища / приложения, чтобы затем просто сохранить значение состояния «Текущая страница» (например, значение Page.GamePage), после чего навигация приложения будет направлять вас соответствующим образом.НО остерегайтесь, когда просто сохраняете текущую страницу, поскольку вам также необходимо сохранить правильное состояние любых значений или введенных пользователем данных на этой странице, когда она также захоронена, этот совет, приведенный выше, должен направить вас в правильном направлении.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...