2015-01-08 13 views
5

Próbuję załadować stronę sieci Web w formancie C# WebBrowser (WPF, nie WinForm). Wraz z inną zawartością na stronie znajduje się rotator obrazu, który dynamicznie tworzy dwa elementy div o tej samej klasie, aby wykorzystać obracający się obraz. W formularzu LoadComplete event kontrolki WebBrowser dołączam arkusz stylów, aby ukryć dwa elementy div. Obie div tworzone dynamicznie onload strony jest następujący:mshtml.HTMLDocument jak ukryć dynamicznie utworzony div przy użyciu atrybutu klasy

<div class="backgroundImageDivsClass" style=" 
    width: 100%; 
    height: 100%; 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    padding: 0px; 
    margin: 0px; 
    z-index: -9999; 
    opacity: 1; 
    background-image: url("data/767/Course/9214/1000000001_474030834.jpg"); 
    background-position: left top; 
    background-size: 100% 100%; 
    background-repeat: no-repeat; 
"></div> 
<div class="backgroundImageDivsClass"></div> 

I sposób css jest przypisany wewnątrz LoadComplete przypadku kontroli WebBrowser jest:

mshtml.IHTMLStyleSheet styleSheet = Document.createStyleSheet(string.Empty, 0); 
styleSheet.cssText = @".backgroundImageDivsClass{display:none;}"; 

Ale to nie wydaje się pracować jako jego nie ukrywając divy. Niech ktoś mi da jakiś pomysł, czego mi brakuje.

Odpowiedz

3

Jest to metoda używana w oparciu o Twoje opisy i działa poprawnie.

public MainForm() 
    { 
     InitializeComponent(); 

     webBrowser.DocumentCompleted += webBrowser_DocumentCompleted; 
     var text = @"<html> 
         <body> 
          <div class=""backgroundImageDivsClass""> 
           <span> hello everyone!</span> 
          </div> 
         </body> 
        </html>"; 

     webBrowser.DocumentText = text; 
    } 

    void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     var doc = webBrowser.Document.DomDocument as IHTMLDocument2; 
     var styleSheet = doc.createStyleSheet(string.Empty, 0); 

     var ruleIndex = styleSheet.addRule(".backgroundImageDivsClass", "display:none", 0);//index can be used to remove the rule 

     //styleSheet.cssText = @".backgroundImageDivsClass{display:none;}"; 
    } 
+0

System.Windows.Controls.WebBrowser.Document nie posiada domDocument – marifrahman

+0

Jednak próbowałem addRule zamiast parametr CSSText bez powodzenia. – marifrahman

2
styleSheet.cssText = @".backgroundImageDivsClass{display:none !important;}"; 

Czy moja propozycja. Wymusi on przesłonięcie cokolwiek innego, próbując ustawić właściwość wyświetlania. (Podobnie jak w przypadku kontroli obrazu rotatorów), ponieważ każdy! Istotne znaczniki są stosowane przez ostatni DOM

Aby aide dalej, jeśli to nie działa ..

pomocą wtyczki Firebug w Firefoksie, aby ustalić, jakie są atrybuty CSS zastosowane dynamicznie do twojego Div.

Możesz edytować CSS renderowany firebug w czasie rzeczywistym, dopóki nie znajdziesz rozwiązania, które działa, a następnie włączyć je do swojego rozwiązania.

Ten artykuł, zwiększa moje sugestie dobrze: http://www.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/

+0

Próbowałem tego bez powodzenia. – marifrahman

+0

Na firebug zastosowałem reguły css po wczytaniu dokumentu i wygląda na to, że działa dobrze. – marifrahman

+0

Ive zredagowałem mój post tam był literówka, były gwiazdkami dookoła ważne, ive usunąłem ich, spróbuj to, że znowu kumpel. – FlemGrem

1

Uważam, że problemem jest to, że należy użyć metody createStyleSheet na dokumencie, a nie na Document.DomDocument. Odpowiedź here może być użytecznym odniesieniem.

Ponadto, jak można przeczytać here, createStyleSheet nie jest już obsługiwany. Począwszy od Internet Explorer 11 należy użyć document.createElement („styl”)

+0

System.Windows.Controls.WebBrowser.Document nie ma obiektu DomDocument – marifrahman

Powiązane problemy