为WebBrowser控件添加后退和前进按钮

jya*_*ard 1 c# silverlight windows-phone-7

我在页面中有一个WebBrowser元素,我想在其中添加一个后退和前进按钮,并且当没有任何内容可以返回时将这些按钮禁用.

在Cocoa中,UIWebView有方法可以轻松检查:canGoBack和canGoForward,并且你可以使用goBack和goForward方法(以及重载等).

Android具有完全相同的方法名称.

我看到这些方法在.Net 4和3.5 SP1中可用.

我发现了一些关于在Silverlight中使用javascript命令的参考文献,但我发现这非常麻烦,而且无法检测历史记录中是否有任何内容(当然除非我自己管理)

当然,Windows Phone中有一些更先进的东西..

jya*_*ard 7

以下是我最终如何做到这一点.

假设您已设置a backButtonforwardButton; 这些按钮的状态将根据您在导航堆栈中的位置进行相应更新.

webViewWebBrowser对象

List<Uri> HistoryStack;
int HistoryStack_Index;
bool fromHistory;

// Constructor
public HelpView()
{
    InitializeComponent();
    HistoryStack = new List<Uri>();
    HistoryStack_Index = 0;
    fromHistory = false;
    webView.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(WebView_Navigated);
    UpdateNavButtons();
}

private void backButton_Click(object sender, RoutedEventArgs e)
{
    if (HistoryStack_Index > 1)
    {
        HistoryStack_Index--;
        fromHistory = true;
        webView.Navigate(HistoryStack[HistoryStack_Index-1]);
        updateNavButtons();
    }
}

private void forwardButton_Click(object sender, RoutedEventArgs e)
{
    if (HistoryStack_Index < HistoryStack.Count)
    {
        HistoryStack_Index++;
        fromHistory = true;
        webView.Navigate(HistoryStack[HistoryStack_Index-1]);
        UpdateNavButtons();
    }
}

private void UpdateNavButtons()
{
    this.backButton.IsEnabled = HistoryStack_Index > 1;
    this.forwardButton.IsEnabled = HistoryStack_Index < HistoryStack.Count;
}

private void WebView_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    if (!fromHistory)
    {
        if (HistoryStack_Index < HistoryStack.Count)
        {
            HistoryStack.RemoveRange(HistoryStack_Index, HistoryStack.Count - HistoryStack_Index);
        }

        HistoryStack.Add(e.Uri);
        HistoryStack_Index++;
        UpdateNavButtons();
    }

    fromHistory = false;
}
Run Code Online (Sandbox Code Playgroud)