2012-12-18 121 views
0

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

根据我的调试,我不通过导航的事件(如下图所示),如果我用下面的Web浏览器控件的导航方案

的MainPage> SecondPage用浏览器(首页>转发>转发>返回>向前迈进了一步>返回(导航事件不会发生))

这似乎令人困惑,但基本上一旦浏览器已被导航回(一次或多次用户想要的),然后转发导航恢复,下次用户希望导航到前一页面,即使页面导航回去,导航事件也不会发生。

为了说明

//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);    
    } 

这与导航的事件没有发生的问题抛出了NavigatingUrls的计数,因此CanNavigateBack标志在主页上仍然是正确的(当用户试图通过回导航再次堆栈到MainPage),当它实际上应该是false,并且我的应用程序的MainPage永远不能被导航到。

回答

0

我测试了你的代码(没有NavigateForward方法),它的工作正常。我不确定你如何使用这种方法。

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

+0

嗯。我打电话向前导航的唯一时间是在应用栏点击事件。如果你愿意看看,我会在今天晚些时候上传一个完整的解决方案到我的skydrive。 – Matthew