繁体   English   中英

如何禁用WPF Web浏览器控件上的删除

[英]How to disable drop on wpf webbrowser control

如何禁用System.Windows.Controls.WebBrowser上的文件删除? 从文档看来,默认情况下应该禁用此行为,因为它是从UIElement.AllowDrop属性继承的。

但是,默认情况下,我可以将文件拖放到WebBrowser控件上。 除此之外,似乎我无法禁用此所谓的非默认行为。 例如,如果我在XAML中将属性的值显式设置为false

<WebBrowser Name="webBrowser1" AllowDrop="False" />

..和/或隐藏在代码中,即

webBrowser1.AllowDrop = false;

然后,我仍然可以将文件拖放到控件上。 如何禁用此行为并消除它造成的安全风险?

经过数小时的努力,我想出了一个可行的解决方案。 因为我使用的是标准WPF Web浏览器,所以我知道我也可以使用Microsoft为Internet Explorer引入的“扩展事件属性”。

我用于禁用将文件拖放到控件上的事件是ondragover。 本质上,我只是在事件发生时就取消它。

<body ondragover="window.event.returnValue=false;">

这并不是真正理想的方法-但是此技术的优点在于,它允许设置许多其他属性,这些属性不能直接从托管代码中获得。 对于滚动条状态(未在托管代码中公开),可以通过这种方式设置。

<body scroll="no">

我尝试了几件事,但看起来WebBrowser控件在布局引擎想要的任何东西之上都断言了其首要地位。 除了控制选址外,它不服从甚至不真正位于视觉树中。 Panel.ZIndex无效,等等。

也许会按顺序使用不同的HTML布局控件,该控件的行为比ActiveX IE 6/7/8接口好:

用更好的浏览器(例如Chrome)替换.NET WebBrowser控件?

通过反射有一些棘手的方法:

1.)通过调用非公共实例属性“ AxIWebBrowser2”上的吸气剂,获得底层浏览器COM实例(SHDocVw.IWebBrowser2)。

2.)也可以通过调用属性设置器,在浏览器COM对象上将属性“ RegisterAsDropTarget”设置为false。

就这样。

var webBrowser = this.WebBrowser.GetType().InvokeMember("AxIWebBrowser2",
                                                        BindingFlags.Instance |
                                                        BindingFlags.NonPublic |
                                                        BindingFlags.GetProperty,
                                                        null,
                                                        this.WebBrowser,
                                                        new Object[] { });

webBrowser.GetType().InvokeMember("RegisterAsDropTarget",
                                  BindingFlags.Instance |
                                  BindingFlags.SetProperty,
                                  null,
                                  webBrowser,
                                  new Object[] { false });

提示:“ this.WebBrowser”是您的WPF WebBrowser实例(System.Windows.Controls.WebBrowser)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM