0

アプリケーションの 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 には決してナビゲートできません。

4

1 に答える 1

0

あなたのコードを (NavigateForward メソッドなしで) テストしましたが、正常に動作しています。その方法をどのように使用しているかわかりません。

私の観察によると、NavigateForward メソッドの使用法に問題がある可能性があります。どのように呼んでいて、いつ呼んでいますか??

于 2012-12-19T10:28:13.197 に答える