如何禁用wpf webbrowser控件上的drop
如何禁用System.Windows.Controls.WebBrowser上的文件丢弃? 从文档中可以看出,默认情况下应禁用此行为,因为它是从UIElement.AllowDrop属性inheritance的。
但是dy默认我可以将文件拖放到WebBrowser控件上。 除此之外,我似乎无法禁用这种假设的非默认行为。 例如,如果我在XAML中将该属性的值显式设置为false
..和/或代码隐藏,即
webBrowser1.AllowDrop = false;
然后我仍然可以将文件拖放到控件上。 如何禁用此行为并消除其创建的安全风险?
好好玩了几个小时后,我想出了一个有效的解决方案。 因为我使用标准WPF webbrowser,我知道我也可以使用Microsoft为Internet Explorer引入的“扩展事件属性”。
我用来禁止将文件拖放到控件上的事件是ondragover。 基本上我只是在发生这种情况时取消该事件。
这不是很理想 – 但是这种技术的好处在于它允许设置一系列其他属性,这些属性不能直接从托管代码中获得。 对于未在托管代码中公开的滚动条状态,可以通过这种方式设置。
我尝试了几件事,但看起来WebBrowser控件在布局引擎想要的任何东西之上都声称它的首要地位。 除了控制选址外,它不服从甚至真正坐在视觉树中。 Panel.ZIndex无效等。
也许是一个不同的HTML布局控件,这个控件在这里表现得比ActiveX IE 6/7/8更好:
用更好的浏览器替换.NET WebBrowser控件,比如Chrome?
反思有一点棘手的方法:
1.)通过在非公共实例属性“AxIWebBrowser2”上调用getter来获取底层浏览器COM实例(SHDocVw.IWebBrowser2)。
2.)通过调用属性setter,在浏览器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)。