Навигация в приложении активирована Windows Phone 7 (Tombstoning) - PullRequest
5 голосов
/ 12 октября 2010

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

Я бы хотел сделать что-то подобное

private void Application_Activated(object sender, ActivatedEventArgs e) { NavigationService.Navigate(new Uri("/Start.xaml", UriKind.Relative));<br> }

но это не работает. Спасибо, Шуреман.

Ответы [ 5 ]

5 голосов
/ 12 октября 2010

Это не общепринятое поведение в отношении захоронения.Ожидается, что приложение должно вернуться точно так, как было, когда пользователь ушел.Помните, что захоронение может быть результатом чего-то иного, чем инициированное пользователем действие в приложении.Например, как пользователь, я бы не хотел, чтобы приложение забывало всю введенную мной информацию и возвращалось к предыдущему экрану только потому, что я ответил на телефонный звонок.

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

Лучше всего будет построить собственную навигационную систему.
Если вы хотите использовать встроенную заднюю панельстек.Ваше событие Application_Activation может установить глобальный флаг, который все страницы обнаружат в своем событии OnNavigatedTo, а затем отреагируют, перейдя назад.Такая обратная навигация, вероятно, будет видна (хотя бы ненадолго) пользователю и создаст менее желательный опыт.

Обновление
Теперь возможно сделать что-то подобное, используя Нелинейная навигационная служба .

2 голосов
/ 28 декабря 2014

Не слушайте всех этих дураков, которые цитируют указания

2 голосов
/ 12 октября 2010

Я второй Мэтт, это не рекомендуемое поведение в соответствии с рекомендациями MSFT. Пользователь WP7 ожидает, что приложение будет заброшено должным образом.

И если вы по-прежнему строги в этом, используйте следующий способ: используйте NavigationService.GoBack () столько раз, сколько вы перемещались. Технически WP7 сохраняет все переходы страниц, которые вы уже сделали в системе, и вы можете запрограммировать возврат на домашнюю страницу. Возможно, вам придется подождать события NavigationCompleted, затем вызвать следующий GoBack () и вызывать его, пока NavigationService.CanGoBack имеет значение false, которое будет вашей домашней страницей:)

0 голосов
/ 10 июня 2014

Мы столкнулись с той же проблемой при преобразовании большого унаследованного проекта, и нам нужно было проявить некоторую свободу с завтрашним днем.Мы все относительно новички в этой платформе, поэтому примите этот совет с недоверием.Наша стартовая страница - SplashPage.xaml.Мы использовали UriMapper для перенаправления из последнего текущего источника:

    private void Application_Activated(object sender, ActivatedEventArgs e) {
        IsTombstoned = ! e.IsApplicationInstancePreserved;

        if (IsTombstoned) {
            //the os wants to return to the last page, but we want it to restart to our splash page 
            RootFrame.UriMapper = new RestartUriMapper();
        }
    }

Это перенаправляет в SplashPage.xaml, а затем мы делаем другую навигацию, чтобы очистить последнюю страницу, на которую хочет перейти ОС (может быть уникальнойк нашей реализации навигации.)

    protected override void OnNavigatedTo(NavigationEventArgs e) {
        base.OnNavigatedTo(e);

        if (NavigationContext.QueryString.ContainsKey("restart")) {
            var app = Application.Current as App;
            //a page redirect mapper was installed to get here from tombstone - reinstate the AssociationUriMapper now
            app.RootFrame.UriMapper = App.Root.AssociationUriMapper;

            //from tombstone, the last current nav source is still state, so force an initial navigation back to 
            //a new instance of this splash page and proceed start up from there
            App.PageNavigation.Navigate(@"/Pages/SplashPage.xaml?fromtomb=true");
        }
    }


class RestartUriMapper : UriMapperBase {
    Uri restartUri;

    public RestartUriMapper() {
        restartUri = new Uri(string.Format("/Pages/SplashPage.xaml?restart={0}", true.ToString()), UriKind.Relative);
    }

    public override Uri MapUri(Uri uri) {
        if (restartUri != null) {
            Uri nextPageUri = restartUri;
            restartUri = null;
            return nextPageUri;
        }

        return uri;
    }
}
0 голосов
/ 15 октября 2010

Как сказал @Matt Lacey, это почти то, что вы не должны делать: и вы, вероятно, не справитесь с рынком рекомендации по сертификации также:

5.2.3 Отзывчивость приложения после его деактивации

Приложение Windows Phone деактивируется, когда пользователь нажимает кнопку «Пуск» или по истечении времени ожидания устройства активируется экран блокировки.Приложение Windows Phone также деактивируется, когда оно вызывает Launcher или Chooser API.При активации время запуска приложения должно соответствовать требованиям, приведенным в разделе 5.2.1.

Microsoft рекомендует приложению восстановить состояние приложения, в котором находился пользователь до его деактивации .Дополнительные сведения см. В разделе «Обзор модели выполнения для Windows Phone».

Какое приложение вы создаете?Трудно сделать вывод о целесообразности возврата на начальный экран, не зная немного об этом или о контексте программы.

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