从silverlight对象外面玩Silverlight播放器

时间:2011-10-19 13:17:21

标签: asp.net silverlight

我有一个使用MediaElement的简单Silverlight播放器。由于我无法控制的原因,他们希望能够拥有基于ASP.NET代码的所有播放/暂停/停止,音量控制等,而不是在Silverlight中构建。我将Silverlight嵌入我的aspx中,如下所示:

<object id="SilverlightPlayer" data="data:application/x-silverlight," 
                                    type="application/x-silverlight-2" width="750" height="460" >
<param name="source" value="ClientBin/VideoPlayer.xap"/>  
<param name="EnableGPUAcceleration" value="true" />
<param name="OnResize" value="HandleResize" />
<param name="autoUpgrade" value="true" />
<param name="initParams" id="SLInitParameters" value='video=MyVideo.wmv' />                    
</object>

我希望用户点击ASPX中的“播放”按钮,它会告诉Silverlight播放器播放视频。 (对于所有其他按钮也是如此)我一直无法找到如何在任何地方执行此操作,因为似乎每个人都将这些控件构建到他们的Silverlight中。

非常感谢任何帮助。

更新
我正在使用以下内容重新创建silverlight:

function CreateSilverlight(hostElement, source, initParams) {
        var pluginId = hostElement.id + "PluginId";

        hostElement.innerHTML = Silverlight.createObject(source, null, pluginId,
            {
                width: '750',
                height: '460',
                background: 'black',
                isWindowless: true,
                alt: '<!--Silverlight not installed-->',
                data: 'data:application/x-silverlight,',
                type: 'application/x-silverlight-2',
                EnableGPUAcceleration: true,
                version: '4.0',
                autoUpgrade: true
            },
            { onError: null, onLoad: null, OnResize: HandleResize },
            initParams, hostElement.id);
}

所以我没有对象的引用。

3 个答案:

答案 0 :(得分:1)

您可以通过HtmlPage.Window.Invoke()方法通过Javascript从HTML与Silverlight进行通信。 Check out this link

答案 1 :(得分:1)

在出现媒体元素的silverlight页面的构造函数中,调用:

HtmlPage.RegisterScriptableObject("player", this)

然后,您可以像这样在页面中添加方法:

[ScriptableMember]
public void Play()
{
    this.MediaElement.Play();
}

[ScriptableMember]
public void Pause()
{
    this.MediaElement.Pause();
}

[ScriptableMember]
public void Stop()
{
    this.MediaElement.Stop();
}

这些[ScriptableMember]属性非常重要。然后,从javascript,你可以做:

var slApp = document.getElementById("SilverlightPlayer");
slApp.player.Play();

这会调用公开的“播放”方法,然后将MediaElement告诉Play()

答案 2 :(得分:0)

我不需要重新加载silverlight控件来让它加载不同的视频。我只需要通过JS向Silverlight桥传递一个新的媒体路径到silverlight mediaElement.Source。通过在屏幕上加载SL后添加调用js函数,我还解决了加载传递给页面的视频的问题。