2011-01-14 17 views
2

私はすぐに、ページの読み込みが完了すると赤のすべてのものを作る方法を考え出した:WPF WebBrowser:要素のクリックイベントを設定するには?

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はかなり役に立たない。あなたが代わりにIHTMLDocument2インタフェースのHTMLDocumentClassを使用することによってそれを行うことができ

+0

Uhm ... CSSの:訪問した(http://www.w3schools.com/Css/pr_pseudo_visited.asp)疑似クラスはあなたのニーズに合っていませんか? – Anvaka

+0

@Anvaka:いいえ。私はC#でclickイベントを処理したいと思います。 – mpen

答えて

3

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; 
     [email protected] = "#ff0000"; 
     return false; 
    } 

} 

上記の溶液は、1つの欠点を持っている:onclickイベントがfalseが返されても、バブル、(つまり、ハイパーリンクでクリックしません。他のページには移動しません)。

+0

「真実」がバブリングを引き起こすと考えられた。そして、 'HTMLDocumentClass'はコンパイルされません: "Interopタイプ' mshtml.HTMLDocumentClass 'は埋め込むことができません。 – mpen

+0

私はVS2008 SP1と.NET 3.5 SP1で自分のコードをテストしましたが、正常に動作します。あなたは多分VS2010および/または.NET 4を使用していますか?次に、http://blogs.msdn.com/b/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspxが理由を説明している可能性がありますなぜこのエラーが発生しているのですか?その場合、2つのことを試すことがあります。1)Interopタイプを埋め込まないでください。 OR:2).NET 3.5用にコンパイルします。 –

関連する問題