我正在使用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);
}
}
}
这将禁用所有鼠标和键盘输入到浏览器窗口。