导航循环和清除后栈

时间:2012-03-01 08:18:30

标签: windows windows-phone-7 navigation

现在,我所拥有的是,当用户点击页面时,页面会自动将用户发送到一个打开pdf文件的webtask。

现在正在发生的事情是,当用户按下后退按钮时,它会在返回到原始页面一瞬间,然后被重定向回到我分配给它的pdf(由于onnavigateto功能)

如何使用,当用户点击pdf文档中的后退按钮时,应用会将用户带回主页?

此外,在主页面上,如何确保清除后台堆叠? (由于应用程序必须退出MainPage,因此无法返回到pdf。)

我的代码到目前为止,我已经尝试过......

{
public partial class Page2 : PhoneApplicationPage
{
public Page2()
{
    InitializeComponent();
}

//as soon as this page is opened, navigate/redirect it to the URL below

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

    WebBrowserTask task = new WebBrowserTask() { URL ="http://test.com/test.pdf"};
    task.Show();

}

//when the user clicks the hardware back button, instead of taking them to the daily notices,    which will send them back to brower
// send the user to the main page

protected override void OnBackKeyPress

              (System.ComponentModel.CancelEventArgs e)
{

    base.OnBackKeyPress(e);

    new Uri("/MainPage.xaml", UriKind.Relative);


}

2 个答案:

答案 0 :(得分:1)

首先,为什么你需要只打开WebBrowserTask的第二页?您可以从主页面执行此操作。

如果您仍想从第二页打开,可以将WebBrowserTask移至构造函数并使用Dispatcher将其包围。这种方法可以保证WebBrowserTask在导航到此页面后只会调用一次(可能会出现一些墓碑问题)。或者,您可以将状态保存到PhoneApplicationPage.State以处理用户的位置以及接下来应该打开的内容。

要清除堆栈,您可以使用下一个代码:

while (NavigationService.BackStack.Any())
{
   NavigationService.RemoveBackEntry();
}

答案 1 :(得分:0)

您必须在应用程序级别而不是页面级别上检测到这一点。当您将用户“重定向”到PDF时,您的应用程序将被暂停。当他们然后导航回来时,它会恢复。

Visual Studio模板提供了一个在应用程序恢复时调用的方法:

// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
{
}

在上述方法中,您可以设置一个标记,然后检查页面导航到的时间,表示发生了简历。