WPF WebBrowser禁用浏览器中网页的鼠标事件?

时间:2019-05-12 08:37:05

标签: wpf video browser

我正在使用WebBrowser制作WPF程序,该程序将播放视频。我想知道是否有一种方法可以禁用其中的网页的鼠标事件,以便当鼠标悬停在其上时,视频控件不会出现。

我尝试将诸如按钮之类的对象放置在网页的前面,并将其不透明度设置为0,但是鼠标事件仍然发生。

我将WebBrowser.IsEnabled属性更改为false,但是浏览器的内容再次检测到鼠标悬停。

有没有办法得到想要的结果?

1 个答案:

答案 0 :(得分:3)

WebBrowser控件不是通常的wpf控件。它是一个ActiveX主机,用于将浏览器托管在新窗口中,该新窗口位于wpf窗口顶部。这就是Windows的“空域问题”。

这就是为什么设置IsEnabled属性或在其之上放置另一个控件的原因。 由于WebBrowser有其自己的窗口,因此阻止鼠标输入到网页的唯一方法是阻止鼠标输入到浏览器窗口。您可以通过外部调用EnableWindow(IntPtr hWnd, bool enable)来做到这一点。

这是一个小样本:

MainWindow.xaml:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <WebBrowser x:Name="Browser"/>
    </Grid>
</Window>

MainWindow.xaml.cs:

namespace Test
{
    static class Win32
    {
        [DllImport("user32.dll")]
        public static extern bool EnableWindow(IntPtr hWnd, bool enable);
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Win32.EnableWindow(Browser.Handle, false);
        }
    }
}

这将禁用对浏览器窗口的所有鼠标和键盘输入。