C# WPF窗口预览MouseMove事件不存在';鼠标悬停在浏览器控件上时不会触发
我正在构建一个小型WPF应用程序,在平板电脑上运行,平板电脑有一个DockPanel,上面有一些内容和一组按钮,按下这些按钮时,可以加载各种媒体作为要显示的内容,包括图像、视频文件、PDF和网页。默认内容是图像的幻灯片放映,如果在一定时间后未检测到输入,则当前内容应恢复为幻灯片放映C# WPF窗口预览MouseMove事件不存在';鼠标悬停在浏览器控件上时不会触发,c#,wpf,mouseevent,webbrowser-control,C#,Wpf,Mouseevent,Webbrowser Control,我正在构建一个小型WPF应用程序,在平板电脑上运行,平板电脑有一个DockPanel,上面有一些内容和一组按钮,按下这些按钮时,可以加载各种媒体作为要显示的内容,包括图像、视频文件、PDF和网页。默认内容是图像的幻灯片放映,如果在一定时间后未检测到输入,则当前内容应恢复为幻灯片放映 我一直在这样做,每秒钟启动一个计时器,将计数器增加1,如果计数器超过某个值,则返回幻灯片,并将PreviewMouseMove事件绑定到我的主窗口,将计数器重置为0。这适用于图像和视频文件,但我在WebBrowser
我一直在这样做,每秒钟启动一个计时器,将计数器增加1,如果计数器超过某个值,则返回幻灯片,并将PreviewMouseMove事件绑定到我的主窗口,将计数器重置为0。这适用于图像和视频文件,但我在WebBrowser控件中显示的PDF和网页以某种方式阻止了PreviewMouseMove事件的触发。我认为这是不可能的,对吗?如果没有,是否有其他方法全局检测鼠标运动,或从WebBrowser获取事件?看起来WebBrowser中带有鼠标事件的奇怪行为很常见,对此有很多问题,但我只能找到使用浏览器的WinForms实现而不是Windows.Controls.WebBrowser的示例,它具有不同的文档属性。我相信这是可能的,但请记住,web浏览器是它自己的堆栈,浏览器中的所有内容都是Javascript。您可以通过javascript设置event hanlder来执行操作,但必须通知您的C#程序。查找有关如何让C#程序在web浏览器中注册以获得事件通知的示例。我将发布一些示例代码作为回答。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//must wait for load completed
webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted);
}
private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
mshtml.HTMLDocument doc;
doc = (mshtml.HTMLDocument)webBrowser1.Document;
//get the IHTMLDocumentEvents2 interface
mshtml.HTMLDocumentEvents2_Event iEvent;
iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
//Register a handler
iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
}
//here's the handler
private bool ClickEventHandler(mshtml.IHTMLEventObj e)
{
textBox1.Text = "Item Clicked";
return true;
}
}