在我的WPF应用程序中,我有一个WebBrowser控件。我有一个包含文件的网格,当我单击网格中的某个项目时,将从数据库中检索文件内容以显示在WebBrowser中。
有两种类型的文件:
PDF:创建一个临时文件,并使用web broswer Navigate功能加载文件。
HTML:字符串传递给NavigateToString函数。
如果我查看PDF,然后是HTML文档,右键单击会显示上下文菜单。我想保留大部分内容,例如打印,但我想阻止浏览器让用户返回页面,甚至转发。
如果不编辑内容以添加Javascript等,我可以采取哪些控制措施来阻止后退/前进发生?
答案 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;
}
};