用Silverlight(C#)调用JavaScript中的方法
——Silverlight与JavaScript交互第三篇

第一篇:Silverlight中C#获取与修改HTML DOM元素信息
第二篇:用JavaScript调用Silverlight(C#)中的方法
==================================

前面一篇讲了用JavaScript调用Silverlight(C#)方法的方式,这一篇讲讲怎样用Silverlight来调用JavaScript方法。

[Scriptable]标记真是非常的好,可以允许JavaScript访问Silverlight中的方法,还可以允许Silverlight来调用JavaScript方法。

和JavaScript调用C#方法一样,首先要为Page类注册一个实例名称,如下:

[Scriptable]
public partial class Page : Canvas
{
public Page()
{
WebApplication.Current.RegisterScriptableObject(“OoboyNet”, this);
}
….
}

假设我们在XAML中有这样一个矩形或者文本框或者按钮等等(看你自己的选择咯!),并假设它的x:Name为btnRect,那么我们首先在Page_Loaded方法中为其注册一个事件:

btnRect.MouseLeftButtonDown += new MouseEventHandler(btnRect_MouseLeftButtonDown);

然后我们再在C#中声明一个EventHandler,也用[Scriptable]标记一下,如下:

[Scriptable]
public event EventHandler CallJS;

我们再来写刚才为按钮btnRect注册的事件控制函数,代码如下:

void btnRect_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
if (CallJS != null)
{
CallJS(this, EventArgs.Empty);
}
}

好C#中的工作做完了,下面就要写JavaScript了。在JavaScript中,首先要在createSivlerlight方法的events中注册一个onLoad事件,代码如下:

events: {
onLoad : OnLoaded
}

我们再为这个事件写一个控制函数,代码如下:

function OnLoaded(sender, args){
//我们刚才在C#里注册的实例OoboyNet
//C#里注册的事件CallJS,现在把这个事件的控制函数指定为JS方法
sender.Content.OoboyNet.CallJS = JSFunction;
}

好吧,剩下的就是最后指定的那个JS方法了:

function JSFunction(sender, args){
alert(“This is from JavaScript”);
}

OK,Silverlight与JavaScript、HTML DOM的交互三篇到这里就结束了。

2 Comments

  1. 红红博客的网址已变为http://www.diqici.com/redblog 麻烦你改下链接地址,谢谢!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.