2011-01-14 2 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"; 
    } 
} 

이제 어떻게 내가 클릭 할 때 요소 만 색상을 변경할 수 있도록하려면? elemonclick 속성을 가지고 있지만 그 유형은 dynamic이므로 그걸로 무엇을해야할지 모르겠다. documentation은 꽤 쓸모가 없습니다.

+0

Uhm ... CSS : 방문한 사용자 (http://www.w3schools.com/Css/pr_pseudo_visited.asp) 가상 클래스가 사용자의 필요에 맞지 않습니까? – Anvaka

+0

@Anvaka : 아니요. C#에서 click 이벤트를 처리하고 싶습니다. – mpen

답변

3

당신은 IHTMLDocument2 인터페이스 대신 HTMLDocumentClass를 사용하여 그것을 할 수 :

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; 
    } 

} 

위의 솔루션, 하나의 단점이있다 다음 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에서 이유를 설명 할 수 있습니다. 왜이 오류가 발생합니다. 이 경우 두 가지를 시도해 볼 수 있습니다. 1) Interop 유형을 포함하지 마십시오. 또는 : 2) .NET 3.5 용으로 컴파일하십시오. –

관련 문제