Windows Phone 8 принесла такую замечательную возможность, как быстрое возобновление состояния приложения после его перезапуска из списка приложений или через плитку начального экрана с полным сохранением состояния и истории навигации внутри приложения (для возможности последующей навигации используя кнопку Назад так, как если бы приложение никуда и не сворачивалось).
Если вы уже пробовали пользоваться Windows 8 и приложениями из Windows Store, вы, возможно, заметили, что при запуске приложения со стартового экрана вы вернетесь именно к тому месту приложения, на котором вы его оставили. Именно такого результата мы и добьемся в нашем приложении дляWindows Phone 8 .
Итак, начнем.
Для начала, давайте откроем файл манифеста нашего приложения (кликнув по нему в Solution Explorer и выбрав View Source, в английской редакции Visual Studio). Все, что нам нужно сделать, это добавить в элемент DefaultTask атрибут под названием ActivationPolicy со значением Resume. Вот так:
По большому счету, этим изменением мы добились того, что наше приложение при перезапуске через стартовый экран/список приложений стало восстанавливаться к своему предыдущему состоянию плюс переходу на страницу, указанную в атрибуте NavigationPage элемента DefaultTask манифеста нашего приложения. Сразу после этого, история навигации нашего приложения выглядит вот так:

Это немного ускорило перезапуск за счет того, что система больше не очищает состояние и не запускает приложение с нуля. Но, мы идём дальше.
Теперь мы должны отменить этот ненужный нам переход на главную страницу после перезапуска приложения. Для этого, нам нужно немножко отредактировать файл App.xaml.cs (можно заметить, что SDK почему-то не хочет работать так, как описано на MSDN, поэтому мы пойдем немного другим путём).
Для начала, давайте добавим приватное нестатическое поле типа System.Boolean в наш класс App и назовём его _reset.
Следующим шагом, нужно найти приватный метод InitializePhoneApplication (он автоматически создается шаблоном по-умолчанию) и настроить инициализацию RootFrame, определив наши обратотчики для событий Navigating и Navigated.
Последним шагом будет модификация тел методов-обработчиков этих событий.
И это всё, цель достигнута. Теперь, после воз��бновления приложения при его перезапуске, пользователь будет попадать именно туда, откуда он покинул это приложение.

Буквально за считанные минуты мы сделали наше приложение гораздо более приятным в работе.
Можно так же дополнительно поиграться и, например, при возобновлении очищать историю кнопки Назад, сохранив при этом только состояние текущей страницы. Для этого в обработчике события Navigated необходимо добавить следующую строчку:

На этом всё, спасибо за внимание.
В оригинальной статье отсутствовали некоторые моменты из официальной документации, которые я посчитал уместным добавить на суд читателей.
Если вы уже пробовали пользоваться Windows 8 и приложениями из Windows Store, вы, возможно, заметили, что при запуске приложения со стартового экрана вы вернетесь именно к тому месту приложения, на котором вы его оставили. Именно такого результата мы и добьемся в нашем приложении для
Итак, начнем.
WMAppManifest.xml
Для начала, давайте откроем файл манифеста нашего приложения (кликнув по нему в Solution Explorer и выбрав View Source, в английской редакции Visual Studio). Все, что нам нужно сделать, это добавить в элемент DefaultTask атрибут под названием ActivationPolicy со значением Resume. Вот так:
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume" />
По большому счету, этим изменением мы добились того, что наше приложение при перезапуске через стартовый экран/список приложений стало восстанавливаться к своему предыдущему состоянию плюс переходу на страницу, указанную в атрибуте NavigationPage элемента DefaultTask манифеста нашего приложения. Сразу после этого, история навигации нашего приложения выглядит вот так:

Это немного ускорило перезапуск за счет того, что система больше не очищает состояние и не запускает приложение с нуля. Но, мы идём дальше.
App.xaml.cs
Теперь мы должны отменить этот ненужный нам переход на главную страницу после перезапуска приложения. Для этого, нам нужно немножко отредактировать файл App.xaml.cs (можно заметить, что SDK почему-то не хочет работать так, как описано на MSDN, поэтому мы пойдем немного другим путём).
Для начала, давайте добавим приватное нестатическое поле типа System.Boolean в наш класс App и назовём его _reset.
private bool _reset;
Следующим шагом, нужно найти приватный метод InitializePhoneApplication (он автоматически создается шаблоном по-умолчанию) и настроить инициализацию RootFrame, определив наши обратотчики для событий Navigating и Navigated.
RootFrame.Navigating += RootFrame_Navigating;
RootFrame.Navigated += RootFrame_Navigated;
Последним шагом будет модификация тел методов-обработчиков этих событий.
private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (_reset && e.IsCancelable && e.Uri.OriginalString == "/MainPage.xaml")
{
e.Cancel = true;
reset = false;
}
}
private void RootFrame_Navigated(object sender, NavigationEventArgs e)
{
_reset = e.NavigationMode == NavigationMode.Reset;
}
И это всё, цель достигнута. Теперь, после воз��бновления приложения при его перезапуске, пользователь будет попадать именно туда, откуда он покинул это приложение.

Буквально за считанные минуты мы сделали наше приложение гораздо более приятным в работе.
Можно так же дополнительно поиграться и, например, при возобновлении очищать историю кнопки Назад, сохранив при этом только состояние текущей страницы. Для этого в обработчике события Navigated необходимо добавить следующую строчку:
if (e.NavigationMode == NavigationMode.Reset) while (RootFrame.RemoveBackEntry() != null);

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