C # WebBrowser-Steuerelement, das CSS nicht anwendet

8

Ich habe ein Projekt, an dem ich in VS2005 arbeite. Ich habe ein WebBrowser-Steuerelement hinzugefügt. Ich füge eine einfache leere Seite zum Steuerelement hinzu

%Vor%

und fügen Sie dann verschiedene Elemente über das dom hinzu (mit _webBrowser.Document.CreateElement). Ich lade auch eine CSS-Datei:

%Vor%

Hier ist der Inhalt der CSS-Seite:

%Vor%

Die Stilseite wird erfolgreich geladen, aber die einzigen Elemente auf der Seite, die davon betroffen sind, sind diejenigen, die sich anfangs auf der Seite befinden (body und mainDiv). Ich habe auch versucht, die css in ein Element im Header-Bereich zu integrieren, aber es betrifft nur die Elemente, die dort sind, wenn die Seite erstellt wird.

Meine Frage ist also: Hat jemand eine Vorstellung davon, warum die CSS nicht auf Elemente angewendet wird, die nach dem Laden der Seite erstellt werden? Ich habe auch versucht, die CSS nicht anzuwenden, bis alle meine Elemente hinzugefügt sind, aber die Ergebnisse nicht ändern.

    
JamesL 01.04.2010, 17:26
quelle

7 Antworten

6

Ich habe eine kleine Änderung an Ihrer AddStyles () -Methode vorgenommen und sie funktioniert für mich. Woher nennst du es? Ich habe es von "_webBrowser_DocumentCompleted" aufgerufen.

Ich muss darauf hinweisen, dass ich AddStyles aufrufen, nachdem ich das DOM geändert habe.

%Vor%

Hier ist mein DocumentCompleted-Handler (Ich habe basic.css einige Styles zum Testen hinzugefügt):

%Vor%

Das ist, was ich bekomme (modifiziert den Stil, um es so hässlich zu machen, wie ein einzelner Mensch es hoffen kann): D):

alt text http://www.freeimagehosting.net/uploads/2e372f7276.png

    
Andre Artus 21.06.2010 23:45
quelle
1

Eine Lösung besteht darin, den HTML-Code vor dem Festlegen des DocumentText zu prüfen und CSS auf der Client-Seite zu injizieren. Ich setze die Eigenschaft der Steuerurl nicht, aber erhalte den HTML über WebClient und setze dann den DocumentText. Wenn Sie DocumentText (oder in Ihrem Fall Document) einstellen, nachdem Sie das DOM manipuliert haben, könnte es dazu führen, dass es korrekt rendert wird.

%Vor%     
Mark Davis 21.06.2010 16:05
quelle
0

Es wäre ziemlich schwer zu sagen, es sei denn, Sie senden einen Link von diesem.

aber normalerweise ist die beste Methode, um Stil-bezogene Sachen zu machen, dass Sie die CSS bereits in der Seite haben und in Ihrem c # -Code fügen Sie nur IDs oder Klassen zu Elementen hinzu, um die Stile-Effekte zu sehen.

    
XGreen 01.04.2010 18:03
quelle
0

Ich habe festgestellt, dass generierte Tags mit dem Attribut class nicht auf ihre Stile angewendet werden.

Dies ist meine Problemumgehung, die ausgeführt wird, nachdem das Dokument generiert wurde:

%Vor%     
hultqvist 08.06.2010 10:58
quelle
0

Ich verwende eine ähnliche Steuerung anstelle von WebBrowser, lade HTML-Seite mit "Standard" -Stilregeln und ändere die Regeln innerhalb des Programms.

(DrawBack - Wartung, wenn ich eine Regel hinzufügen muss, muss ich sie auch im Code ändern)

%Vor%     
Atara 08.06.2010 11:23
quelle
0

Es könnte sein, dass die Objekte auf der Seite zum Zeitpunkt des Ladens der Seite EXIST sind, so dass jeder Stil angewendet werden kann. Nur weil Sie einen Knoten zur DOM-Struktur hinzufügen, heißt das nicht, dass alle Attribute innerhalb des Browsers manipuliert und gerendert werden können. Die obigen Methoden scheinen einen Ansatz zu verwenden, der die Seite (DOM) neu lädt, was darauf hindeutet, dass dies der Fall sein könnte. Kurz gesagt, aktualisieren Sie die Seite, nachdem Sie ein Element hinzugefügt haben

    
rigamonk 09.06.2010 18:32
quelle
0

Es klingt, als ob phq dies erfahren hat. Ich denke, die Art, wie ich mich annähme, ist ein Verweis auf jQuery zu Ihrem HTML-Dokument (von Anfang an).

Erstellen Sie anschließend innerhalb der Seite eine JavaScript-Funktion, die die Element-ID und den Namen der anzuwendenden Klasse akzeptiert. Verwenden Sie innerhalb der Funktion jquery, um die betreffende Klasse dynamisch anzuwenden oder die CSS direkt zu ändern. Verwenden Sie zum Beispiel .addClass- oder .css-Funktionen von jquery, um das Element zu ändern.

Von dort, in Ihrem C # Code, nachdem Sie das Element dynamisch hinzufügen, rufen Sie dieses Javascript auf, wie von Rick Strahl hier beschrieben: Ссылка

    
j03m 15.06.2010 22:45
quelle

Tags und Links