WPF WebBrowser: Как установить событие нажатия элемента? - PullRequest
2 голосов
/ 14 января 2011

Я понял, как сделать все красным, как только страница закончит загружаться:

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, поэтому я не знаю, что с ним делать. Документация довольно бесполезна.

1 Ответ

3 голосов
/ 16 января 2011

Вы могли бы сделать это, используя HTMLDocumentClass вместо интерфейса IHTMLDocument2:

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;
        win.@event.srcElement.style.backgroundColor = "#ff0000";
        return false;
    }

}

Приведенное выше решение имеет один недостаток: событие onclick не всплывает, даже если false возвращается (т. Е. Нажатие на гиперссылки не приводит к переходу на другие страницы).

...