Skip to main content
 首页 » 编程设计

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

2024年01月21日26think

我在页面中有一个 WebBrowser 元素,我想在其中添加一个后退和前进按钮,并在没有什么可以返回和没有什么可以前进时禁用这些按钮。

在 Cocoa 中,UIWebView 具有轻松检查的方法:canGoBack 和 canGoForward,并且您有可用的 goBack 和 goForward 方法(以及 reload 等)

Android 具有完全相同的方法名称来实现相同的目标。

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

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

当然,Windows Phone 中有一些更高级的东西..

请您参考如下方法:

这就是我最终如何做到的。

这假设您设置了 backButton和 forwardButton ;这些按钮的状态将根据您在导航堆栈中的位置进行相应更新。
webView是 WebBrowser目的

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