2009-06-18 2 views
1

私はVisual StudioなしでSilverlightを作成しています。私は生のhtml、XAML、およびjs(javascript)を持っています。JavaScript関数を呼び出してXAML/Silverlightから値を渡すにはどうすればよいですか?

私がしたいことは、XAMLからjavascriptに値を渡すことです。私は、XAMLからjavascript関数を呼び出して起動することができます。下記参照。 canvas要素には、マウスの左ボタンアップイベントがあり、javascriptのLandOnSpaceを呼び出します。

しかし、私はどのようにShowMsgを呼びますか?より正確に言えば、その呼び出しにどのように値を渡すのでしょうか?通常javascriptであなたは行けます:ShowMsg(500,700、 "あなたは私たちのお金を借りています");

しかし、私はxamlコードでそれを試してみると、何かが壊れてしまいます。私はそれがJavaScript関数が存在しないと不平を言うと思う。

 <Canvas x:Name="btnLandOnSpace" Background="LightGreen" MouseLeftButtonUp="LandOnSpace" 
      Cursor="Hand" Canvas.Top ="0" Width="70" Height="50"> 
      <TextBlock Text="LandOnSpace" /> 
      </Canvas> 

function LandOnSpace(sender, e) { //on server 
if (!ShipAnimateActive && !blnWaitingOnServer) { 
    blnWaitingOnServer = true; 
    RunServerFunction("/sqgame/getJSLLandOnSpace"); 
     ShowWaitingBox(); 
     }; 
else { 
    alert('Waiting on server.'); 
}; 
} 



function ShowMsg(SintCost, SintRent , SstrChoiceText) { 
blnPayChoice = true;  
intCost = SintCost;  
intRent = SintRent;  
strChoiceText = SstrChoiceText; } 

+0

を、ここでのSilverlight 2ツールをダウンロードし2.0で開発を開始するには

すべての問題を考慮すると、銀色の代わりに月明かりに切り替えることは有益でしょうか? 私も銀色を放棄し、レンダリングのためにGoogleのO3Dを使用することがあります。それは、私がやりたい二次元のものを、とても簡単に扱うことができます。 – Neo42

+0

また、HTML5のCanvasタグを使用しています。その後、私のブラウザのサポートはすべてのブラウザになります。 IEは明らかにそれをサポートしています。 – Neo42

+0

これは面白いです: http://blog.jimmy.schementi.com/2008/05/story-of-ruby-and-python-in-silverlight.html 私に助けてくれるものがあります。 – Neo42

答えて

2

Silverlight 2.0からjavascript関数を呼び出す場合は、System.Windows.Browser名前空間でHtmlPageを使用できます。しかし、上記のあなたの例に基づいて

var param = new object[] {"some parameter"}; 
HtmlPage.Window.Invoke("myfunc",param); 

はあなたのイベントハンドラはJavascriptではなくC#やVBである場合1.0 Silverlightを使用しているようです。

Silverlight 2.0に移行できます。サーバーページに使用するサーバーは、Silverlight 2.0(または3.0)の使用を妨げるものではありません。 Google App EngineでSilverlight 2.0アプリケーションを完全に実行できます。 http://www.microsoft.com/downloadS/details.aspx?familyid=C22D6A7B-546F-4407-8EF6-D60C8EE221ED&displaylang=en

とSilverlightの間で通信する方法についていくつかの参考のためには、あなたがこのページをチェックすることができ、ブラウザ内のコードとJavascriptを管理:http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx

+0

うわー。私のJavaScriptファイルにはすでに3000行ほどのコードがあります。それをマネージコードに接続するために私は何ができるのかを見ていきます。または、少なくとも私のGoogleのアプリケーションエンジンのサイトでいくつかのマネージコードをテストします。そして私の次のプロジェクトはそのように始まります。私のコードはすでに3つの言語、.JS、.XAML、Pythonで書かれています。私は現時点でVBネットをスローする必要があるかどうかはわかりません。私はVBを知っていますが、プロジェクトは今のところそれなしでは遠くに進んでいます。私はある時点で実験します。ありがとうございました。 – Neo42

1

これを行う正しい方法は、jsハンドラをデフォルトのパラメータで起動することです。次に、Javascriptから、Silverlight 1.0モデルを使用してXAMLに移動します。 Silverlight 1.0 docsを参照してください。 FindNameメソッドを参照してください。

+0

これは私が今行うことです。たとえば、xaml要素の名前を、渡したID番号を含めて変更します。たとえば、x:Name = "btnLandOnSpace"をx:Name = "btnLandOnSpace05"に変更します。そしてjavascriptはsender.nameを使って名前を取得して解析します。 変数を直接渡すことはできませんか?私は、別の変数を渡す必要がある、またはそれを必要とするシナリオについて考えることができます。私は名前に複数の値を埋め込むことができると思うが、それは乱雑に思える。 – Neo42

+0

ハンドラに値を直接渡すことはできません。特に、1.0(JS)プログラミングモデルを使用している間はそうではありません。 )SL2 with Prism Commandingを使用している場合、それは別の話です) –

+0

JSのみを使用する場合はSilverlight 2を使用することはできないと言っていますか?私はSilverlight 2の機能を実装したいと誓っていました。私はgoogleのアプリケーションエンジンサイトでページを実行しているので、残念ながら、私が知る限り、.netに切り替えることはできません。私は別のサーバーにSilverlightを実装する方法をすべて試しました。他の種類のSilverlightページをホストするために.net 3.0サーバーが必要だったとはかなり確信していました。これは正しいですか?ここでそれについて新しい質問をしなければならないでしょうか? – Neo42

関連する問題