禁用WPF WebBrowser控件中的后退导航

时间:2014-03-31 14:22:32

标签: c# wpf navigation webbrowser-control

在我的WPF应用程序中,我有一个WebBrowser控件。我有一个包含文件的网格,当我单击网格中的某个项目时,将从数据库中检索文件内容以显示在WebBrowser中。

有两种类型的文件:

PDF:创建一个临时文件,并使用web broswer Navigate功能加载文件。

HTML:字符串传递给NavigateToString函数。

如果我查看PDF,然后是HTML文档,右键单击会显示上下文菜单。我想保留大部分内容,例如打印,但我想阻止浏览器让用户返回页面,甚至转发。

如果不编辑内容以添加Javascript等,我可以采取哪些控制措施来阻止后退/前进发生?

2 个答案:

答案 0 :(得分:0)

我想出的答案是Navigated事件。包含Web浏览器的用户控件具有一个私有布尔值,用于确定是否允许导航。

如果是(通过用户控件的Navigate方法设置),则控件可以导航到新页面。页面加载后,boolean设置为false,表示后退/前进被禁用。

在我的情况下,这会增加奖励:无法点击链接。我不希望这些加载在浏览器控件中 - 我只希望这样可以查看在网格中选择的页面。

但是,右键单击链接仍然在新窗口中打开选项。

这可能不是最好的解决方案,但它对我有用。

答案 1 :(得分:0)

要禁用退格键以导航但仍保留textbox的链接可点击和退格功能,我们需要为WebBrowser添加PreviewKeyDown和Navigating事件的事件处理程序:

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