Silverlight与Html Dom的交互(二)--javascript调用silverlight

  这个例子在网上很容易查到,也很实用。这里我也引用一下。省事了

Silverlight 2 在Silverlight中如何用JavaScript调用.NET代码

使用RegisterScriptableObject

在Silverlight 2中提供了如下两个类型:
ScriptableMemberAttribute:允许我们在Silverlight把成员暴露给Script。
ScriptableTypeAttribute:允许我们在Silverlight把类型暴露给Script。
同时HtmlPage提供了RegisterCreateableType和RegisterScriptableObject方法,用来注册可被脚本使用的类型或者对象实例。有了上面这些,就可以做到在JavaScript中调用Silverlight。
看一个简单的示例,在这个示例中,我们期望通过JavaScript传递两个参数给Silverlight中的方法,由该方法计算出结果后显示在Silverlight中。

首先我们编写在Silverlight中的界面布局:
<StackPanel Background="#CDFCAE" Orientation="Horizontal">
<
Border CornerRadius="10" Width="100" Height="40" Margin="50 10 0 0">
<
TextBlock Text="结果显示:" FontSize="20" Foreground="Red"></TextBlock>
</
Border>
<
Border CornerRadius="10" Background="Green" Width="300" Height="40">
<
TextBlock x:Name="result" FontSize="20" Foreground="White"
Margin="20 5 0 0"></TextBlock>
</
Border>
</
StackPanel>
并在加载时注册一个脚本可调用的当前页面实例:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
HtmlPage.RegisterScriptableObject("Calculator", this);
}
编写一个Add方法,该方法将在JavaScript中被调用,必须为public,用ScriptableMember特性暴露给脚本。
[ScriptableMember]
public void Add(int x, int y)
{
int z = x + y;
this.result.Text = String.Format("{0} + {1} = {2}", x, y, z);
}
现在编写测试页中的内容,提供输入的input控件:
<div class="main">
<
input id="txt1" type="text" />
<
input id="txt2" type="text" />
<
input id="Button1" type="button" value="确 定"/>
</
div>
编写JavaScript调用Silverlight中的方法,获取Silverlight插件,Calculator就是我们刚才所注册的实例:
<script type="text/javascript">
function
callSilverlight()
{
var slPlugin = $get('Xaml1');

slPlugin.content.Calculator.Add($get('txt1').value,$get('txt2').value);
}
</script>
在按钮单击事件中调用该方法
<input id="Button1" type="button" value="确 定" onclick="callSilverlight()" />

posted @ 2010-11-24 14:51  Wang Juqiang  阅读(501)  评论(0编辑  收藏  举报