我有一个使用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);
}
所以我没有对象的引用。
答案 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函数,我还解决了加载传递给页面的视频的问题。