Silverlight显示问题

时间:2020-03-06 14:58:04  来源:igfitidea点击:

我已经创建了一个不错的Silverlight控件,完全可以执行我想要的操作,它看起来很棒:)当我将其托管在测试项目ASPX示例文件或者HTML示例文件中时,它显示得很好。

现在,我必须在现有的ASP.NET 2.0项目中使用该控件,该项目具有精美的设计。我遇到的问题是控件未完全显示应如何显示:

  • 载入进度未显示
  • 在将鼠标移到包含它的咏叹调上之前,该控件通常不可见

显然,这是由于我的HTML / CSS设计引起的,但是发现问题将非常耗时,所以有人在这方面有知识吗?有关如何确保控件正确显示的规则有哪些?应该使用哪些CSS属性?

PS:因为我有一个2.0应用程序,所以我将对象标记方法用于Silverlight,并且它包含在DIV中,其高度和宽度设置为样式。

请求了代码段。就像这样(基本上是来自silverlight测试项目的HTML测试页的副本(可以正常工作)):

<div id="silverlightControlHost" style="height: 300px; width: 750px;">
    <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2"
    width="100%" height="100%">
    <param name="source" value="Contiki.SilverLight.FileUploader.xap" />
    <param name="onerror" value="onSilverlightError" />
    <param name="background" value="white" />                            
    <a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
        <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
        style="border-style: none" />
    </a>
    </object>
    <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe>
</div>

该DIV包含在表格的单元格中,该表格又是较大设计的一部分。有很多提到的CSS。不知道这是否有帮助...

解决方案

CSS问题有时很难调试。不同浏览器中的行为是否相同?CSS是否在任何地方都使用" float"?该应用程序是否可以在表格外的同一页上,然后在div之外的同一页上正常运行?

正如亚当所说,CSS问题是真正的PITA。通常,当我遇到这样的问题时,我首先要指向一个空白CSS而不是"花哨的" CSS,然后开始重新添加样式,直到能够重现该问题为止。

自己找到原因...

事实证明,将控件放置在html表中时,Silverlight出现显示问题。在Silverlight论坛上找到了有关此信息。它是关于beta 2的,但是我已经升级到了发行版,但这仍然是一个问题。

Try this.  Add a height and a width to
  the table containing the Silverlight
  control.  You may also want to add a
  single character of white space inside
  the TD containing the control.
  
  Basically when the table was rendered
  it couldn't 'see' the size of the
  contents so it either didn't render at
  all or only rendered to the size of a
  single white-space character.
  
  -- John Stockton

我的设计非常复杂,带有嵌套表,因此我实际上还无法使其工作。

更新:

我最终实现的实际修复是一个小的JavaScript,"刷新"了包含的<DIV>。这里是:

<script type="text/javascript">
    function refreshSL()
    {
        var div = document.getElementById('silverlightControlHost');
        div.style.display = 'block';
    }
    refreshSL();
</script>

我将其放置在HTML中实际SL标记下方的位置,然后它起作用了(我猜应该在页面加载事件上调用它是正确的做法。

哈哈

我遇到了同样的问题,这让我发疯了。该问题被隔离到Internet Explorer。在所有其他浏览器(甚至Opera)上都可以正常工作。

解决方案肯定是黑客。由于这实际上是解决IE中的错误的方法,因此我们可以正式使用它。

从技术上讲,我们不应该使用表格进行布局,但在现实世界中,这是使内容始终跨浏览器工作的唯一方法。