Tengo un proyecto en el que estoy trabajando en VS2005. He agregado un control WebBrowser. Agrego una página básica vacía para el controlC# WebBrowser control no aplica css
private const string _basicHtmlForm = "<html> "
+ "<head> "
+ "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> "
+ "<title>Test document</title> "
+ "<script type='text/javascript'> "
+ "function ShowAlert(message) { "
+ " alert(message); "
+ "} "
+ "</script> "
+ "</head> "
+ "<body><div id='mainDiv'> "
+ "</div></body> "
+ "</html> ";
private string _defaultFont = "font-family: Arial; font-size:10pt;";
private void LoadWebForm()
{
try
{
_webBrowser.DocumentText = _basicHtmlForm;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
y luego añadir diversos elementos a través del DOM (usando _webBrowser.Document.CreateElement). Yo también estoy cargando un archivo css:
private void AddStyles()
{
try
{
mshtml.HTMLDocument currentDocument = (mshtml.HTMLDocument) _webBrowser.Document.DomDocument;
mshtml.IHTMLStyleSheet styleSheet = currentDocument.createStyleSheet("", 0);
TextReader reader = new StreamReader(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"basic.css"));
string style = reader.ReadToEnd();
styleSheet.cssText = style;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Aquí está el contenido de la página css:
body {
background-color: #DDDDDD;
}
.categoryDiv {
background-color: #999999;
}
.categoryTable {
width:599px; background-color:#BBBBBB;
}
#mainDiv {
overflow:auto; width:600px;
}
El estilo de página se está cargando con éxito, pero los únicos elementos de la página que están siendo afectadas son las que están inicialmente en la página (body y mainDiv). También intenté incluir el CSS en un elemento de la sección del encabezado, pero solo afecta los elementos que están allí cuando se crea la página.
Así que mi pregunta es, ¿alguien tiene alguna idea sobre por qué el CSS no se está aplicando a los elementos que se crean después de cargar la página? También intenté no aplicar el CSS hasta después de agregar todos mis elementos, pero los resultados no cambian.
he preguntado lo mismo. Siempre asumí que la creación de una página web de esa manera solo creaba una página obsoleta/muerta/estática, y que el motor de renderización dejaba de verificar los estilos a menos que un elemento dentro de la página hiciera que el procesador se "despertara". Pero estoy sacando eso de la nada. Acabo de aprender a agregar el CSS como lo primero en la cabeza al crear inicialmente un documento. –
Sé que esto probablemente no ayuda en nada (por eso es un comentario), pero quería decirle por experiencia que el componente WebBrowser de C# es basura. Las cosas aparentemente triviales tienden a terminar como dolores de cabeza masivos y cuando no hace lo que quieres, a menudo terminas teniendo que ir al componente ActiveX subyacente ... que es un desastre por decir lo menos (~ 5 interfaces diferentes por completo desorganizado, que tiene conjuntos arbitrarios de funcionalidad). Recomiendo un componente de navegador diferente siempre que sea posible, por ejemplo, GeckoFX, basado en el motor Firefox. – Teekin
Falta una información clave aquí: los elementos que está creando, los que no están siendo diseñados. Presumiblemente, está configurando el atributo de clase en '" categoryDiv "', '" categoryTable "', etc ... Pero eso no está explícitamente establecido en su pregunta. Teniendo en cuenta los resultados que describes, estoy mucho más inclinado a creer que hay un error en la creación de tu elemento que cualquier cosa directamente relacionada con la creación de tu hoja de estilo. Habiendo dicho eso, te das cuenta de que estás forzando a que la nueva hoja de estilos sea la primera en el documento (y por lo tanto de menor prioridad), ¿verdad? – Shog9