2014-03-31 66 views
0

在我的WPF應用程序中,我有一個WebBrowser控件。我有一個包含文件的網格,當我單擊網格中的一個項目時,文件內容將從數據庫中檢索出來,並顯示在WebBrowser中。在WPF WebBrowser控件中禁用導航回到頂端

有兩種類型的文件:

PDF:臨時文件被創建,並在網絡broswer導航功能是用來加載該文件。

HTML:該字符串被傳遞給NavigateToString函數。

如果我查看一個PDF,然後是一個HTML文檔,右鍵單擊顯示上下文菜單。我想保留大多數東西,比如打印,但是我想停止瀏覽器讓用戶返回頁面,甚至轉發。

沒有編輯內容添加Javascript等,有什麼控制我可以做,以阻止後/前進發生?

回答

0

我想出的答案是Navigated事件。包含Web瀏覽器的用戶控件具有一個用於確定是否允許導航的私有布爾值。

如果是(通過用戶控件的Navigate方法設置),則控件可以導航到新頁面。頁面加載後,布爾值被設置爲false,意味着後退/前進被禁用。

在我的情況下,這增加了一項獎勵:鏈接無法點擊。我不想在瀏覽器控件中加載這些內容 - 我只希望它能查看網格中選定的頁面。

但是,右鍵單擊某個鏈接仍然會在新窗口中打開選項。

這可能不是最好的解決方案,但它適用於我。

0

要禁用退格用於導航回來,但仍保留鏈接點擊和退格功能的文本框,我們需要添加事件處理程序都PreviewKeyDown和導航事件的WebBrowser:

// member variable to indicate if the window allows navigation to other URL 
private bool allowNavigation = false; 
private WebBrowser bs; 

// triggered every time a key is pressed down in the WebBrowser 
this.bs.PreviewKeyDown += (sender, args) => 
{ 
    if (args.Key == Key.Back) 
    { 
     // temporarily disable navigation triggered by backspace 
     this.allowNavigation = false; 
    } 
}; 
// triggered if the WebBrowser is switching URL (either by backspace or link clicking) 
this.bs.Navigating += (sender, args) => 
{ 
    if (!allowNavigate) 
    { 
     // if not allowed, cancel navigation and set back allowNavigation 
     // this will only cancel the navigation triggered by backspace 
     args.Cancel = true; 
     this.allowNavigation = true; 
    } 
};