代码之家  ›  专栏  ›  技术社区  ›  Andrew Keller

嵌入Silverlight应用程序时为白色背景

  •  1
  • Andrew Keller  · 技术社区  · 15 年前

    我目前有一个主要在ExpressionBlend中设计的Silverlight应用程序,它使用一个边框和一个环绕圆角矩形控件的阴影效果。当我将这个应用程序嵌入到一个页面中时,对象周围有一个白色的背景。我想让这个背景透明,这样页面背景颜色(在CSS中定义)就可以显示出来,或者通过某种方式将Silverlight应用程序更改为蓝色背景而不是白色。

    我当前问题的屏幕截图位于: http://img694.imageshack.us/img694/8132/problemz.jpg

    以下是我用于将应用程序嵌入页面的代码:

    <object width="750px" height="480px" data="data:application/x-silverlight-2," type="application/x-silverlight-2">
        <param name="source" value="/ClientBin/Debug/my.xap" />
        <param name="windowless" value="true" />
    </object> 
    

    我试过摆弄无窗参数,但没有成功。谢谢你的帮助

    2 回复  |  直到 15 年前
        1
  •  2
  •   Andrew Keller    15 年前

    解决方案: 补充

    <param name="background" value="transparent" />
    
        2
  •  1
  •   JustinAngel    15 年前

    “我希望使此背景透明,以便页面背景颜色(在CSS中定义)显示通过”

    不,你没有。

    简短回答: 只需将Silverlight页面根元素的背景更改为浅蓝色或其他颜色。

    更长的答案: 可以使用windowsless=true将浏览器内容与Silverlight内容交织在一起。
    http://msdn.microsoft.com/en-us/library/cc838156(VS.95).aspx

    长回答: 从性能角度来看,windowsless=true很差劲,还有很多其他限制,所以不要使用它。
    Limitations of Windowless mode for Silverlight

    让我们来做浏览器插件概述101:
    1)初始化属于插件“foo”的对象标记
    2)浏览器加载插件“foo”
    3)浏览器将页面上的呈现矩形(x1、y1、x2、y2)委托给foo插件。

    将浏览器中的内容和插件交织在一起的唯一方法是使用混合模式渲染。基本上是这样的:
    1)浏览器呈现rect(x1,y1,x2,y2)并发送到foo插件。
    2)foo插件将步骤(1)的结果插入渲染中的每一帧。

    步骤(1)没有 在非交织模式下发生。这也是默认值。

    因此,通过添加交织,您可以为Silverlight中的每个帧渲染添加更多的步骤。 由于性能原因,这是非常糟糕的。

    底线: 您需要的是交织内容,在Silverlight中,该内容由无窗口=真参数设置,但它会导致性能问题和其他限制。 由于您的场景足够简单,我只需将Silverlight背景设置为适当的颜色。