如何在Silverlight 3对象上调用javascript函数?

我定义了以下Silverlight控件:

       <param name="initParams" value=" Username=, Editable=, Align= " />  Get Microsoft Silverlight   

我在Silverlight控件(Page.xaml.cs)中公开了以下方法,以便Javascript可以访问:

 [ScriptableMember] public bool HasPendingUpdates() { return btnSave.IsEnabled; } 

然后我在我的aspx页面中有一个Javascript测试函数,试图用它做一些事情:

 var imageViewer = $("#objImageViewer")[0]; if (imageViewer.Content.Page.HasPendingUpdates()) { alert("Pending Changes Exist!"); } else { alert("NO Pending Changes Exist!"); } 

问题是它在Content对象之后失败了。 我测试了以下内容:

 var imageViewer = $("#objImageViewer")[0]; imageViewer // Valid imageViewer.Content // Valid imageViewer.Content.Page // Invalid imageViewer.Content.HasPendingUpdates() // Invalid 

所以我不确定我做错了什么。 如何进入内容中的function?

我使用的是IE8,Silverlight 3,ASP.NET。 Silverlight控件是使用object标签创建的,因为我认为控件不是Silverlight 3+中的选项。

任何帮助将非常感激。

您需要向Silverlight HTMLBridge注册一个标识符,以在Content属性上公开,并为其提供一个具有一些可编写脚本的入口点的对象。

我倾向于在Page构造函数中执行此操作: –

 public Page() { InitializeComponent(); HtmlPage.RegisterScriptableObject("Page", this); } 

现在你的代码应该工作了。

我有这个Silverlight应用程序结构:

 public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { Page uploadControl = new Page(); // ... HtmlPage.RegisterScriptableObject("uploadControl", uploadControl); } } [ScriptableType] public partial class Page : UserControl { [ScriptableMember] public void StartUpload() { // ... } } 

而且,在Javascript中:

 function startUpload() { $find("<%= SilverlightUpload.ClientID %>") .get_element().content.uploadControl.StartUpload(); return false; } 

所以,我看一下HtmlPage.RegisterScriptableObject调用,只显示标记为[ScriptableType]类型