WPF 网页浏览器 : How to set element click event?

标签 wpf wpf-controls

我已经弄清楚如何在页面加载完成后立即将所有内容变为红色:

private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
    var doc = (IHTMLDocument2)webBrowser1.Document;
    foreach (IHTMLElement elem in doc.all)
    {
        elem.style.backgroundColor = "#ff0000";
    }
}

现在,如果我想让元素仅在单击时改变颜色怎么办?我看到 elem 有一个 onclick 属性,但它的类型是 dynamic 所以我不知道如何处理它。 documentation非常没用。

最佳答案

您可以使用 HTMLDocumentClass 而不是 IHTMLDocument2 接口(interface)来实现:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
    {
        mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)webBrowser1.Document;
        doc.HTMLDocumentEvents_Event_onclick += new mshtml.HTMLDocumentEvents_onclickEventHandler(OnClickHandler);
    }

    bool OnClickHandler()
    {
        mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)webBrowser1.Document;
        mshtml.IHTMLWindow2 win = doc.parentWindow;
        <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f584641016f4a594a415b015c5d4c6a434a424a415b015c5b56434a014d4e4c44485d405a414b6c4043405d" rel="noreferrer noopener nofollow">[email protected]</a> = "#ff0000";
        return false;
    }

}

上述解决方案有一个缺点:即使返回了 falseonclick 事件也不会冒泡(即单击超链接不会导航到其他页面)。

关于WPF 网页浏览器 : How to set element click event?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689265/

相关文章:

wpf - 如何在 WPF ContextMenu 中对菜单项进行分组而不嵌套它们?

wpf - 无法将 WPF DataGrid 绑定(bind)到具有带有空格和其他特殊字符的名称的列的表

c# - 无需显式重新创建的 WPF 刷新 CollectionView(Refresh() 方法调用)

c# - 如何在 WPF 中为 [Flags] 枚举创建通用开关?

wpf - 将 WPFToolkit DataGrid 的事件绑定(bind)到 ModelView 的命令 (MVVM)

c# - WPF 在 `TreeView` 内包装项目

WPF ItemsControl - 如何知道 itemscontrol 何时完成加载,以便我可以关注第一个?

wpf - ListView 选择颜色

c# - 有没有办法解决Expression Blend的 "extract"WPF控件?

c# - XAML 样式属性未被继承