1

Silverlightコントロールに次の(2)'ScriptableMember'タイプがあります。

<ScriptableMember()>
Public Property MType As MyCustomType

<ScriptableMember()>
Public Property Message As String

ここでの目的は、明らかにJavascriptのHTMLブリッジを介した公開を可能にすることです。'Message'プロパティの呼び出しは簡単で、次のように完全に機能します。

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

ただし、JSでインスタンスプロパティにドリルダウンして、インスタンスプロパティの値を設定するのに問題があります。私が思うコードは次のようになります:

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

'MType'に追加し、'Name'という名前のパブリックプロパティの1つにアクセスしたことに注目してください。MyCustomTypeクラスには、必要に応じてすべての適切な「ScriptableMember」属性があります。

ただし、上記の行を実行すると、次のエラーが発生します。

「MicrosoftJScriptランタイムエラー:オブジェクトはこのプロパティまたはメソッドをサポートしていません」

'メッセージ'の割り当てで問題なく動作します。JSでインスタンスプロパティをドリルダウンしてその変数を割り当てることは可能ですか?もしそうなら、私はJSが正しくないか、これを修正するために何をする必要がありますか。ありがとう!

4

1 に答える 1

0

さて、私はこれについて何の助けも得られませんでした、しかし私はそれを理解しました、そして答えは「はい」です。

1つ目は、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";

私を思いとどまらせたのは、インスタンスプロパティにスクリプト可能なタイプのインスタンスを登録する必要があると思っていたのですが、そうする必要はありませんでした。ドリルダウンしてプロパティにアクセスできます。

次の投稿では、これについてもう少し詳しく説明してい
ます。JavaScriptからSilverlightのインスタンスプロパティにアクセスする

于 2012-03-09T04:20:09.657 に答える