我可以在Silverlight中的Scriptable Member属性中的Javascript中设置实例属性吗?

时间:2012-02-13 15:42:54

标签: javascript silverlight htmlbridge

我的Silverlight控件中有以下(2)'ScriptableMember'类型:

<ScriptableMember()>
Public Property MType As MyCustomType

<ScriptableMember()>
Public Property Message As String

这里的目的显然是允许通过Javascript中的HTML桥接器进行曝光。调用“消息”属性是微不足道的,并且完全像下面这样工作:

var SLControl = document.getElementById("SilverlightControl");
SLControl.Content.MyRegisteredControl.Message = 'Hello';

但是,通过向下钻取到JS中的属性,我无法设置实例属性的值。我认为代码应该如下:

SLControl.Content.MyRegisteredControl.MType.Name = 'John';

注意我是如何添加'MType'然后访问其名为'Name'的公共属性之一。 MyCustomType类根据需要具有所有适当的“ScriptableMember”属性。

但是当上面的那一行被运行时,我收到以下错误:

“Microsoft JScript运行时错误:对象不支持此属性或方法”

它可以很好地分配'消息'。 JS中是否可以向下钻取实例属性并分配其变量?如果是这样,我的JS不正确,或者我需要做些什么来解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,我没有得到任何帮助,但我想出来了,答案是'是'。

第一,我的Silverlight控件上有一个实例属性,如下所示:

<ScriptableMember()>
Private _MyClass1 As New MyCustomClass
Public Property MyClass1() As MyCustomClass
 Get
   Return _MyClass1
 End Get
 Set(ByVal value As MyCustomClass)
   _MyClass1= value
 End Set
End Property

根据HTML桥接的要求,注册我的控件的类实例的实例,以便我可以从JavaScript获取访问权限:

HtmlPage.RegisterScriptableObject("MySLControl", Me)

现在我想到我需要为实例属性注册上面的另一个成员,但我不需要这样做。您可以通过作为可编写脚本的成员公开的主类实例深入查看它,如下所示:

//Get instance of the Silverlight File Upload Control
var SLControl = document.getElementById("SilverlightControl");
if (SLControl != null)
  //Drill down through the instance property exposed on the Silverlight control
  SLControl.Content.MySLControl.MyClass1.Name = "John Smith";

让我失望的是认为我需要为实例属性注册一个脚本类型的实例,但我不需要这样做。我可以向下钻取并访问该物业。

以下文章对此进行了更多扩展:
Accessing Instance Properties in Silverlight from JavaScript