【问题标题】:How to avoid blinking when calling NavigateToString in WP7 Silverlight WebBrowser Control在 WP7 Silverlight WebBrowser 控件中调用 NavigateToString 时如何避免闪烁
【发布时间】:2011-08-21 20:50:46
【问题描述】:

我需要在屏幕中呈现一些富文本,这些富文本需要按照时间线进行更改。在我的 iOS 版本中,我使用 Web 控件,在 Android 版本中,我使用 TextSpan。

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

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

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

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

【问题讨论】:

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


【解决方案1】:

我将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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我打算这样做:

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

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

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

      仍在寻找更好的答案..

      【讨论】:

      • 另外,考虑组件一中的这个控件.. 仍然是 CTP:componentone.com/SuperProducts/RichTextBoxPhone
      • 我尝试了不透明度和可见性,但内容也没有出现。尝试了所有与背景的组合,但每秒只需更新几次,内容就会因闪烁而消失
      • 使用Micorosft.Phone.Reactive,您可以使用Throttle().DistinctUntilChanged() 平滑更改。
      猜你喜欢
      • 2013-04-08
      • 2011-12-04
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      相关资源
      最近更新 更多