代码之家  ›  专栏  ›  技术社区  ›  AnthonyWJones

Silverlight 3 OnLoad事件绑定多个实例

  •  1
  • AnthonyWJones  · 技术社区  · 15 年前

    我在一个页面中嵌入了两个Silverlight实例,如下所示(仅将内容简化为相关详细信息):-

    <object id="SL1" data="data:application/x-silverlight-2," type="application/x-silverlight-2">
       <param name="source" value="/clientBin/Common.xap"></param>
       <param name="minRuntimeVersion" value="3.0.40624.0"></param>
       <param name="windowless" value="True"></param>
       <param name="onload" value="silverlight_onload"></param>
       <param name="initParams" value="some configuration here"></param>
     </object>
    
    <object id="SL2" data="data:application/x-silverlight-2," type="application/x-silverlight-2">
       <param name="source" value="/clientBin/Common.xap"></param>
       <param name="minRuntimeVersion" value="3.0.40624.0"></param>
       <param name="windowless" value="True"></param>
       <param name="onload" value="silverlight_onload"></param>
       <param name="initParams" value="a different configuration here"></param>
     </object>
    

    如你所见 objects 指向同一个xap,但initparams中的内容不同。

    但是请注意,onload参数指向 相同的 函数名。这个问题的特殊部分是 不变量 .

    在全球范围内的其他地方,我有:

    function silverlight_onload(sender, eventargs)
    {
      //Magic pixie dust here
    }
    

    我们的目标是 sender 并确定哪个对象元素是事件的源。直截了当的回答(但由于这个问题是不可接受的)是使用两种不同的功能。我在寻找不需要为每个SL对象添加新函数到全局命名空间的东西。

    另外,任何能告诉我为什么SL不能从主机浏览器获得更多帮助并像其他元素事件(如onlick)那样处理onload参数的人都会得到荣誉。例如,要求浏览器 eval("function() {" + onload + "}" 并将返回函数附加到onload事件。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Gus    15 年前

    您的目标是在javascript中获取initparams,然后用它做些什么吗?如果可以的话:

    sender.getHost().InitParams
    

    gethost()返回实际的插件对象 see msdn page for more details . 我不知道如何获取对象的ID,除非将其设置为initparam。

        2
  •  0
  •   Graeme Bradbury    15 年前

    你的第一个电话应该是 silverlight.js reference .

    基本上,你的“silverlight-onload”javascript函数将作为发送者获得实际的HTML对象元素,所以检查它的ID是什么,你就会得到我认为你想要的。

    SL无法从主机获得更多帮助的原因是HTML对象没有OnLoad事件。 Object Element reference.


    好吧,由于文档似乎没有反映实际情况,您只剩下从Silverlight控件内部调用javascript方法了。只需将一个ID作为init参数之一传入。