我的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不正确,或者我需要做些什么来解决这个问题。谢谢!
答案 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 强>