Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF窗口预览MouseMove事件不存在';鼠标悬停在浏览器控件上时不会触发_C#_Wpf_Mouseevent_Webbrowser Control - Fatal编程技术网

C# WPF窗口预览MouseMove事件不存在';鼠标悬停在浏览器控件上时不会触发

C# WPF窗口预览MouseMove事件不存在';鼠标悬停在浏览器控件上时不会触发,c#,wpf,mouseevent,webbrowser-control,C#,Wpf,Mouseevent,Webbrowser Control,我正在构建一个小型WPF应用程序,在平板电脑上运行,平板电脑有一个DockPanel,上面有一些内容和一组按钮,按下这些按钮时,可以加载各种媒体作为要显示的内容,包括图像、视频文件、PDF和网页。默认内容是图像的幻灯片放映,如果在一定时间后未检测到输入,则当前内容应恢复为幻灯片放映 我一直在这样做,每秒钟启动一个计时器,将计数器增加1,如果计数器超过某个值,则返回幻灯片,并将PreviewMouseMove事件绑定到我的主窗口,将计数器重置为0。这适用于图像和视频文件,但我在WebBrowser

我正在构建一个小型WPF应用程序,在平板电脑上运行,平板电脑有一个DockPanel,上面有一些内容和一组按钮,按下这些按钮时,可以加载各种媒体作为要显示的内容,包括图像、视频文件、PDF和网页。默认内容是图像的幻灯片放映,如果在一定时间后未检测到输入,则当前内容应恢复为幻灯片放映


我一直在这样做,每秒钟启动一个计时器,将计数器增加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;
    }
}