在WP7 Silverlight WebBrowser控件中调用NavigateToString时如何避免闪烁

时间:2011-08-21 20:50:46

标签: silverlight visual-studio-2010 windows-phone-7

我需要在屏幕上渲染一些需要在时间轴后更改的Rich Text。在我的iOS版本中,我使用Web控件,在Android版本中,我使用TextSpan。

我阅读了一些建议,其中人们声称WebControl是在Windows Phone 7中呈现富文本的最佳方式,因此我有一个WebBrowser控件,我用HTML字符串填充。一切正常,直到我决定通过调用NavigateToString以编程方式更改内容。内容会发生变化,但两者之间会短暂闪烁到白色屏幕。

由于我的程序需要每秒多次更新WebBrowser控件的内容,因此屏幕将从所有刷新中全部变为白色。

我正在考虑将TextBlocks与内联和LineBreak一起使用的痛苦想法,但我必须手动转换我的HTML,所以我想尝试看看是否有人知道如何做到这一点。

要复制此问题,只需在页面上放置一个WebBrowser控件并使用NavigateToString更新内容以查看白色过渡闪烁

3 个答案:

答案 0 :(得分:4)

我组合了OnNavigated和javascript。我从Opacity = 0开始,并将占位符页面加载到控件中。

<html>
 <head>
  <script type="text/javascript">function setContent(s) { document.body.innerHTML = s; } </script>
 </head>
 <body></body>
</html>

在OnNavigated中,我设置Opacity = 1,然后使用InvokeScript加载我的实际内容。

webBrowser.InvokeScript("setContent", myContents);

在我的情况下,我正在填写整个页面内容,但如果您只是更改页面的某些部分,则可以编写更具针对性的javascript。

答案 1 :(得分:1)

行为是正常的,因为WebBrowser控件基本上必须重新呈现整个页面,即使您更改了内容的一小部分。您最好的选择是使用RichTextBox - 这将涉及一些手动文本格式处理。

答案 2 :(得分:0)

我打算这样做:

WB_OnNavigating --> visibility = collapsed
WB_OnNavigated --> visibility = visible

或不透明度。但考虑到每秒多次刷新,这些可能会太慢。仍然值得一试看看你得到了什么。

XAML背景是否有白色或HTML内容的背景颜色可以与页面背景匹配?

仍在寻找更好的答案..