2011-04-09 17 views
12

Tengo una página que contiene un control WebBrowser que actualiza el contenido con frecuencia. Estoy usando un fondo negro, pero el color predeterminado antes de cargar el contenido de WebBrowser es blanco. Podría cambiarlo cargando una pequeña cadena HTML con el fondo establecido en negro, pero todavía hay un período de tiempo cuando el WebBrowser aparece en color blanco, por lo que se produce una especie de efecto de parpadeo.¿Es posible cambiar el color de fondo del control WebBrowser antes de cargar contenido?

Mi pregunta es esta: ¿hay alguna manera de cambiar el color del control subyacente de WebBrowser?

He intentado algunas soluciones como ocultar el WebBrowser hasta que se haya cargado el contenido, pero ninguno de estos se siente muy elegante y no funciona tan bien.

Respuesta

9

He descubierto algo que funciona en mi caso. No es necesariamente el más elegante, pero hace el trabajo bien.

que establecer el valor predeterminado de la OpacityWebBrowser a 0. A continuación, hay que adjuntar un controlador de eventos para el evento LoadCompleted:

private void browser_Post_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    browser_Post.Opacity = 1; 
} 

Ahora, antes de cargar una nueva página HTML, me puse la Opacity de nuevo a 0 por lo que oculta el navegador mientras se está procesando el nuevo HTML para que no haya parpadeo de fondos. Cuando el HTML termine de cargarse, el evento se activará y la nueva página HTML se mostrará como se esperaba.

+1

WebBrowser no tiene ninguna propiedad Opacidad en .NET 3.5 ... – PatrickB

3

Estoy de acuerdo con johnforrest. Es mucho mejor establecer la opacidad predeterminada en 0 y la máscara de opacidad en negro en el código XAML. Después de eso en el evento LoadComplete;

private void dataBrowser_LoadCompleted(object sender,NavigationEventArgs e) 
{ 
    dataBrowser.OpacityMask = null; 
    dataBrowser.Opacity = 1; 
} 

No flickering ... !!

3

Suponiendo que usted no desea cambiar la opacidad reales de conformidad con las otras sugerencias, puede cambiar el color de fondo de la pantalla inicial usando HTML:

this.WebBrowser1.Navigate("about:blank"); 
    IHTMLDocument2 _doc = this.WebBrowser1.Document.DomDocument as IHTMLDocument2; 
    _doc.write("<html><body style=\"background: #f0f0f0\"></body></html>"); 
+0

gracias me dieron solución a partir de su respuesta – MansinhDodiya

2

He encontrado que el cambio de la opacidad o Visibilidad del control no oculta por completo el parpadeo. Mi solución es ajustar el alto del control a 0 y luego reiniciar de nuevo después de que se carga, así:

double savedHeight = browser.ActualHeight; 
browser.Height = 0; 

browser.Navigated += (sender, e) => 
{ 
    browser.Height = savedHeight; 
} 

browser.Navigate(...); 
Cuestiones relacionadas