我在我的应用程序的第二页上放置了一个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永远不能被导航到。
嗯。我打电话向前导航的唯一时间是在应用栏点击事件。如果你愿意看看,我会在今天晚些时候上传一个完整的解决方案到我的skydrive。 – Matthew