WPF webbrowser在浏览器中禁用鼠标事件以供网页



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

我尝试将对象放置在网页的前面,并使其不透明0,但是鼠标事件仍然通过。

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

有没有办法获得所需的结果?

WebBrowser控件不是通常的WPF控件。它是一个ActiveX主机,可在WPF窗口顶部绘制的新窗口中托管浏览器。这被称为Windows"空域问题"。

这就是为什么设置ISEnable属性或将另一个控件放在其顶部的原因。由于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);
        }
    }
}

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

最新更新