2012-03-01 5 views
-2

現在、私が持っているのは、ユーザーがページをクリックすると、ページが自動的にPDFファイルを開くWebタスクにユーザーを送ります。ナビゲーションループとバックスタックのクリア

今の状況は、ユーザーが戻るボタンを押したときに、元のページに戻ってから1秒間だけ元のページに戻ってから、pdfにリダイレクトされます(onnavigateto関数のため)。

ユーザーがpdfドキュメントの戻るボタンをクリックすると、ユーザーはメインページに戻ります。

また、メインページで、バックスタックがクリアされていることを確認するにはどうすればよいですか? (アプリケーションが持っているのメインページに終了しますので、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); 


} 

答えて

1

まず、なぜあなたをWebBrowserTaskを開くだけの2番目のページが必要ですか?これはメインページから行うことができます。

まだ2番目のページから開く場合は、WebBrowserTaskをコンストラクタに移動し、Dispatcherで囲みます。この方法は、WebBrowserTaskがこのページへの移動後に1回だけ呼び出されることを保証しています(多分、トーンストーントーンに関するいくつかの問題があります)。または、状態をPhoneApplicationPage.Stateに保存して、ユーザーの場所と次に開く必要のある場所を処理できます。

あなたは次のコードを使用することができ、スタックをバッククリアするために:

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

あなたではなく、ページレベルよりも、アプリケーションレベルでこれを検出する必要があります。ユーザーをPDFにリダイレクトすると、アプリケーションは中断されます。その後、彼らは戻ってナビゲートし、それが再開されます。

上記の方法の中で
// 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) 
{ 
} 

、あなたのページがあること,,するためにナビゲートされたときにあなたがして確認することを、フラグを設定できます。

Visual Studioのテンプレートは、アプリケーションが再開したときに呼び出されたメソッドを提供しますレジュームが発生したことを示します。

関連する問題