アプリケーションの 2 ページ目に配置した Web ブラウザ コントロールでナビゲーション イベントを使用しています。forward と back のナビゲーション イベントが正しく機能しているようです。ただし、Navigated イベント ハンドラーのナビゲーション イベントで使用されるブラウザー URL の現在のスタックを維持するなど、特定のアクションを実行します。これは、特定のシナリオによっては、ページが移動されたときに常に登録されるわけではありません。ブラウザー URL の現在のスタックを維持する目的は、ホーム ページ (ロードしたアプリケーションの 2 ページ目に移動した最初のページ) がバック スタックを使用して移動した場合、アプリケーションがMicrosoft の要件に記載されているアプリケーションの最初のページ。
私のデバッグによると、次の Web ブラウザー コントロール ナビゲーション スキームを使用する場合、Navigated イベント (以下に示す) をステップ実行しません。
MainPage > SecondPage with browser( Homepage > Forward > Forward > Back > Forward > Back (ナビゲートイベントは発生しない)
これは紛らわしいように見えますが、基本的に、ブラウザが戻って (1 回またはユーザーが望む回数) ナビゲートされてから、次にユーザーが前のページに移動したいときに、前方ナビゲーションが再開されると、その Navigated イベントは発生しません。ページがナビゲートされても。
説明する
//should always pass through this event when ANY navigation occurs
void TheWebBrowser_Navigated(object sender,
System.Windows.Navigation.NavigationEventArgs e)
{
//If we are Navigating Backward and we Can Navigate back,
//remove the last uri from the stack.
if (_IsNavigatingBackward == true && CanNavigateBack)
{
_NavigatingUrls.Pop();
}
//Else we are navigating forward so we need to add the uri
//to the stack.
else
{
_NavigatingUrls.Push(e.Uri);
//If we do not have the navigated uri in our history
//we add it.
if (!_History.Contains(e.Uri.ToString()))
_History.Add(e.Uri.ToString());
}
//If there is one address left you can't go back.
if (_NavigatingUrls.Count > 1)
CanNavigateBack = true;
else
CanNavigateBack = false;
//Finally we hide the progress bar.
ShowProgress = false;
_IsNavigatingBackward = false; //to eliminate staying as true when navigating forward and forward btn not pressed
}
public void NavigateForward()
{
_IsNavigatingBackward = false;
TheWebBrowser.InvokeScript("eval", "history.go(1)");
//_IsNavigating = true;
}
public void NavigateBack()
{
_IsNavigatingBackward = true;
TheWebBrowser.InvokeScript("eval", "history.go(-1)");
}
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
if (CanNavigateBack)
{
e.Cancel = true;
NavigateBack();
}
else
base.OnBackKeyPress(e);
}
Navigated イベントが発生しないというこの問題は、NavigatingUrls のカウントをスローするため、CanNavigateBack フラグが実際には false であるべきなのに、(ユーザーがバック スタックを介して MainPage に再度移動しようとしているときに) ホーム ページで true のままになります。私のアプリケーションの MainPage には決してナビゲートできません。