Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 捕捉鼠标点击事件_C#_Wpf_Cefsharp - Fatal编程技术网

C# 捕捉鼠标点击事件

C# 捕捉鼠标点击事件,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我真的在谷歌上搜索到了这个,但是没有找到任何有用的东西。 我正在使用C#WPF cefsharp.WPF cefsharp:ChromiumWebBrowser 我想做的就是当用户在网页上点击任何东西时,我想用c#捕捉鼠标点击事件。原因是我在页面上运行javascript,它注册单击的内容并传回一个值。所以我需要从javascript中获取该值。一切都准备好了。我只是无法让C#注册浏览器被点击。C#不需要知道在页面上单击了什么元素,javascript为我处理这些 任何帮助都将不胜感激。如果您要

我真的在谷歌上搜索到了这个,但是没有找到任何有用的东西。 我正在使用C#WPF cefsharp.WPF cefsharp:ChromiumWebBrowser

我想做的就是当用户在网页上点击任何东西时,我想用c#捕捉鼠标点击事件。原因是我在页面上运行javascript,它注册单击的内容并传回一个值。所以我需要从javascript中获取该值。一切都准备好了。我只是无法让C#注册浏览器被点击。C#不需要知道在页面上单击了什么元素,javascript为我处理这些


任何帮助都将不胜感激。

如果您要在JavaScript中捕获一个单击事件,以获取页面上选择的实际上是您的事件的内容。在JavaScript中,通过单击调用C#方法

例如,在我编写的一个应用程序中,我在CefSharp中呈现了一个D3页面,该页面显示了一个force布局图,当用户单击force布局中的一个项目时,JavaScript将该项目的id发送给C#,C#反过来将一段序列化的数据返回给JavaScript,然后显示出来(实际上,我有一个C#类,充当CefSharp和我的模型之间的一个层,处理JavaScript之间的序列化)。听起来你需要采取这样的方法来实现你想要实现的目标,而不是在浏览器控件本身上需要一个实际的点击事件

我在下面添加了一些示例代码,显示了CefSharp中屏幕上的一个按钮(如index.html中定义的)。单击按钮时,它会将一个值从页面传递到JsHandler类,该类会显示一个带有该值的消息框

main window.xaml

index.html


您需要在鼠标向上移动事件中添加一个处理程序

<wpf:ChromiumWebBrowser Grid.Column="1" Grid.Row="0" x:Name="myBrowser" UseLayoutRounding="True"/>

myBrowser.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Browser_MouseUp), true);

private static void Browser_MouseUp(object sender, MouseButtonEventArgs e)
{//Check for button that was clicked and e.Source ...
}

myBrowser.AddHandler(UIElement.MouseUpEvent,新的MouseButtonEventHandler(Browser\u MouseUp),true);
专用静态无效浏览器_MouseUp(对象发送器,MouseButtonEventArgs e)
{//检查已单击的按钮和e。源。。。
}

您使用的是wpf还是winforms?用于注册您的处理程序并将handledEventsToo设置为trueHi不使用wpf非常感谢您的响应。这肯定是我没有考虑过的。您所描述的实际上正是我正在尝试做的。从javascript返回一个id,以便从我的数据库中为要处理的软件。因此您建议使用类似.Javascript:if(Javascriptcondition>0){}C#:受保护的void CsharpFunction(){//Notification.show();}我在我的答案中添加了一些示例代码,这些代码以一种简单的形式实现了我认为您想要的。在实际使用中,您可以将对象作为JSON传递到javascript,以允许您轻松地传递复杂的对象,但CefSharp确实可以处理许多标准类型的转换。@DaeDaLuS_015-对于很难找到一个好的平面图。谢谢:)
    public partial class MainWindow : Window
    {
        JsHandler jsHandler = new JsHandler();

        public MainWindow()
        {
            InitializeComponent();
            Browser.Address = Environment.CurrentDirectory + "/index.html";
            Browser.JavascriptObjectRepository.Register("jsHandler", jsHandler);
        }
    }
    <html>
        <head>
            <script type="text/javascript">
                CefSharp.BindObjectAsync("jsHandler", "jsHandler");
            </script>
            <title>Test Page</title>
        </head>
        <body>
            <button onclick="window.jsHandler.handleJsCall(1)">button</button>
        </body>
    </html>
    class JsHandler
    {
        public void HandleJsCall(int arg)
        {
            MessageBox.Show($"Value Provided From JavaScript: {arg.ToString()}", "C# Method Called");
        }
    }
<wpf:ChromiumWebBrowser Grid.Column="1" Grid.Row="0" x:Name="myBrowser" UseLayoutRounding="True"/>

myBrowser.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Browser_MouseUp), true);

private static void Browser_MouseUp(object sender, MouseButtonEventArgs e)
{//Check for button that was clicked and e.Source ...
}