WPF WebBrowser控件禁用拖放功能。

4
有没有一种方法可以在WPF中禁用像记事本、Word等项目在System.Windows.Controls.WebBrowser控件上拖放的功能? 我尝试了各种选项,例如 AllowDrop="False" - 不起作用。
尝试捕获诸如Drop、PreviewDrop、DragLeave、PreviewDragLeave、PreviewDragOver、PreviewDragEnter等事件- 当我将项目放在WebBrowser控件上时,这些事件都不会触发。

你可以尝试实现在https://dev59.com/K3nZa4cB1Zd3GeqPoEYh中提到的IDocHostUIHandler,然后覆盖其行为。 - AProgrammer
不,那对我的情况没有帮助。 - Techie
2个回答

2
使用构造函数或Xaml创建以下方法将阻止拖动更改Web浏览器的当前状态:
private void webBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
{
    // The WebBrowser control is checking the Uri 
    if (e.Uri.ToString() != "Place your url string here") //ex: "http://stackoverflow.com"
    {
        // Uri is not the same so it cancels the process
        e.Cancel = true;
    }
}

信息:if (!e.Uri.IsFile) MailManager.FileManager.OpenExternalLink(e.Uri) - 使用“IsFile”来区分本地拖放提供的文件路径和实际点击或导航的超链接。还要确保检查if (e.Uri != null),因为如果为null,则可能是HTML代码的正常加载或任何其他预期导航。尝试取消任何导航,可以使用e.Cancel = true; - Battle

0

正如您所提到的,没有任何拖放事件被触发,而且似乎原生浏览器控件非常有限,这给您留下了两种可能性:

  • 要么使用另一个浏览器控件,比如wpfchromium,

  • 要么在浏览器顶部定义一个透明弹出窗口,并在其中处理拖放事件。

:

<WebBrowser Height="300" Width="300" x:Name="wbBrowser"/>
    <Popup  Opacity="1" AllowsTransparency="True" IsOpen="True" Placement="Center" 
     PlacementTarget="{Binding ElementName=wbBrowser}" >
        <Border  Background="Black" Opacity="0.01" 
         Width="300" Height="300">
        </Border>
    </Popup>

这个解决方案并不美观,还需要更多的逻辑来处理弹出窗口的父控件移动。

如果你的主要内容是HTML,你可能会发现这个解决方案也很有用:

如何禁用WPF WebBrowser控件上的拖放


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接