Изменение стека страниц приложения для нажатия кнопки «Назад» на WP7 - PullRequest
0 голосов
/ 28 июня 2011

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

Проблема, с которой я столкнулсяесли я поместил кнопку на панели приложения, чтобы выйти из веб-браузера и вернуться на страницу, предшествующую странице веб-браузера, то стек страниц приложения WP7 запомнит это, и если я начну нажимать кнопку возврата, он перейдет на страницу веб-браузераи начать просмотр страниц (в обратном порядке), которые я просматривал в браузере.

В идеале мне нужно, чтобы страница веб-браузера не включалась в стек страниц приложения, можно ли изменить содержимое стека ввремя выполнения или заставить страницу не включаться?

Статья Jaime описывает ситуацию использования элемента управления браузером.

http://blogs.msdn.com/b/jaimer/archive/2011/02/04/back-button-press-when-using-webbrowser-control-in-wp7.aspx

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

Как правило, невозможно изменить NavigationStack в Windows Phone 7.0 SDK. В Mango (7.1) вы сможете очистить свой NavigationStack.

NavigationService.RemoveBackEntry();

У Джесси Либерти есть очень хорошая статья на эту тему:

http://jesseliberty.com/2011/05/24/managing-the-back-stack/

1 голос
/ 28 июня 2011

В связанной статье показано, как добавить страницы, к которым обращались в веб-браузере, в задний стек.

По умолчанию история навигации элемента управления WebBrowser не включена в задний стек приложения.

Звучит так, как будто вы добавили дополнительное поведение (чтобы включить историю браузера в стек задних страниц) и теперь хотите обойти это.

0 голосов
/ 05 июня 2012

Во-первых, спасибо valipour за предоставленную ссылку!Это отличное решение, но я просто хочу добавить, что для очистки всего стека навигации вам необходимо сделать следующее:

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

    if (e.NavigationMode == NavigationMode.New
        && NavigationContext.QueryString.ContainsKey("clear"))
    {
        while (NavigationService.CanGoBack)
        {
            NavigationService.RemoveBackEntry();
        }
    }
}

Если вы добавите этот код в код MainPage.xaml изапустите его с /MainPage.xaml?clear=true URI, стек навигации будет очищен.

...