2009-06-18 26 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方法。

相关问题