0

我在放置在应用程序第二页上的 Web 浏览器控件中使用导航事件。似乎前进和后退的导航事件工作正常。但是,我执行某些操作,例如在我的 Navigated 事件处理程序中维护在我的导航事件中使用的当前浏览器 url 堆栈,根据某些情况,当页面导航到时并不总是注册。维护当前浏览器 url 堆栈的目的是确保如果主页(这是我加载的应用程序的第二页后导航到的第一个页面)使用后堆栈导航到,应用程序应该返回到Microsoft 要求所述的应用程序的第一页。

根据我的调试,如果我使用以下 Web 浏览器控件导航方案,我不会单步执行 Navigated 事件(如下所示)

MainPage > SecondPage with browser( Homepage > Forward > Forward > Back > Forward > Back (导航事件不发生) )

这似乎令人困惑,但本质上,一旦浏览器被导航回来(一次或用户想要的多次),然后继续向前导航,下次用户希望导航到前一页时,导航事件就不会发生即使页面被导航回。

为了显示

//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 标志在主页上保持为真(当用户尝试再次通过返回堆栈导航到 MainPage 时)实际上应该为假,并且我的应用程序的 MainPage 永远无法导航到。

4

1 回答 1

0

我已经测试了您的代码(没有 NavigateForward 方法)并且工作正常。我不确定您是如何使用该方法的。

根据我的观察,您的 NavigateForward 方法使用可能有问题。你怎么叫它,你什么时候叫它?

于 2012-12-19T10:28:13.197 回答