2009-06-18 31 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,並使用谷歌的O3D進行渲染。它可以很容易地處理我想要做的2D事情。 – Neo42 2009-07-06 16:04:49

+0

我也一直在尋找使用HTML 5中的Canvas標記。然後我的瀏覽器支持將是每個瀏覽器。 IE支持它顯然是這樣或那樣。 – Neo42 2009-07-06 17:38:44

+0

這很有趣: http://blog.jimmy.schementi.com/2008/05/story-of-ruby-and-python-in-silverlight.html 有一種叫做凱龍的東西可以幫助我。 – Neo42 2009-07-15 18:16:42

回答

2

如果您想從Silverlight 2.0調用JavaScript函數,則可以在System.Windows.Browser命名空間中使用HtmlPage。

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

但是根據你上面的例子看來你是使用Silverlight 1.0在您的事件處理程序的Javascript,而不是在C#或VB。

您可以移動到Silverlight 2.0。用於服務器頁面的服務器並不妨礙您使用Silverlight 2.0(或3.0)。 您可以在Google App Engine上完美運行Silverlight 2.0應用程序。

要啓動2.0在這裏下載Silverlight 2的工具進行開發: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

1

正確的做法是使用默認參數激發js處理程序。然後,從Javascript中,使用Silverlight 1.0模型導航到XAML。請參閱Silverlight 1.0 docs。請參閱FindName方法。

相關問題