1

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

4

1 回答 1

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

于 2012-03-09T04:20:09.657 回答