2011-04-09 193 views
12

我有一个页面,其中包含经常更新内容的WebBrowser控件。我正在使用黑色背景,但加载WebBrowser的内容之前的默认颜色是白色。我可以通过加载一个背景设置为黑色的小型HTML字符串来改变它,但仍有一段时间,WebBrowser显示为白色,因此会出现闪烁效果。加载内容之前可以更改WebBrowser控件的背景颜色吗?

我的问题是:有没有办法改变WebBrowser底层控件的颜色?

我已经尝试了一些解决方案,例如隐藏WebBrowser,直到内容被加载,但没有一个感觉非常优雅,并且不能很好地工作。

回答

9

我已经想出了一些适用于我的案例。这不一定是最优雅的,但它完成了工作。

我设置WebBrowser为0的默认Opacity然后,我附上了LoadCompleted事件的事件处理程序:

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

现在,我打开一个新的HTML页面之前,我设置了Opacity回0,所以当新的HTML被渲染时,它隐藏了浏览器,所以没有背景闪烁。当HTML完成加载后,事件将触发,新的HTML页面将按预期显示。

+1

web浏览器没有Opacity属性在.net 3.5 ... – PatrickB 2015-01-07 10:29:36

3

我同意johnforrest。将XAML代码中的默认不透明度设置为0并将不透明度遮罩设置为黑色更好。之后,在LoadComplete事件中;

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

没有闪烁......!

3

假设你不想改变实际的不透明度按照其他建议,您可以使用HTML更改初始显示的背景色:

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

感谢我得到的解决方案,从你的答案 – MansinhDodiya 2013-05-16 09:38:34

2

我发现改变不透明度或能见度的控制不会完全隐藏闪烁。我的解决方法是将控件的高度设置为0,然后将其装入后重新回来,这样的:

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

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

browser.Navigate(...);