在Silverlight1.1中定义Javascript事件的方法

    在Silverlight1.0中XAML文件对应的是一个JAVASCRIPT文件,而在Silverlight1.1中一个XAML文件对应的是一个C#文件,和aspx与aspx.cs的对应关系一样,在XAML中可以定义一个Silverlight对象的事件代理,在与其对应的.xaml.cs文件中定义事件处理方法,在方法中可以操作XAML对象。但是如何为一个XAML对象定义一个JAVASCRIPT事件及事件处理方法呢?

    在Silverlight1.1工程(VS2008)中一个Silverlight页面通常会涉及到四个文件:html宿主文件及与之关联的html.js文件;XAML文件及与之对应的.xaml.cs文件。其中html宿主文件是一个普通的HTML文件用来作为Silverlight对象的容器,.html.js文件用会根据XAML文件来创建Silverlight对象显示在HTML文件中,XAML文件是一个基于XML格式的文件,用来定义Silverlight对象模型。

    按照下面的步骤为Silverlight 对象定义JS事件:

   1.在XAML中定义一个对象(例如:Rectangle)并为其设置事件代理BtnSample_MouseLeftButtonDown

< Canvas  x:Name ="parentCanvas"
        xmlns
="http://schemas.microsoft.com/client/2007"
        xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded
="Page_Loaded"
        x:Class
="BlendTry1.Page;assembly=ClientBin/BlendTry1.dll"
        Width
="640"
        Height
="480"
        Background
="White"
        
>
    
< Rectangle  Canvas.Left ="20"  Canvas.Top ="20"  Width ="100"  Height ="50"  Fill ="#33ddff"  Cursor ="Hand"  MouseLeftButtonDown ="BtnSample_MouseLeftButtonDown"  x:Name ="BtnSample" ></ Rectangle >
</ Canvas >

2.再来看.xaml.cs文件,代码如下:

   [Scriptable]
    
public   partial   class  Page : Canvas
    
{
        [Scriptable]
        
//定义单击事件对象
        public event EventHandler OnButtonClicked;
            
        
public Page()
        
{
             
//注册客户端实例
       WebApplication.Current.RegisterScriptableObject("Sample",this);
              
this.Loaded += this.Page_Loaded;
        }


        
//事件处理方法
        void BtnSample_MouseLeftButtonDown(object sender, MouseEventArgs e)
        
{
            
if (this.OnButtonClicked != null)
            
{
                OnButtonClicked(sender, EventArgs.Empty);
            }

        }


        
private void Page_Loaded(object sender, EventArgs args)
        
{
               
// Required to initialize variables.  Needs to be done from loaded event so FindName works properly. 
              InitializeComponent();
        }

    }

在C#文件中定义了Silverlight对象点击事件的处理方法,在这个方法里边会调用另一个事件,这个事件对象(OnButtonClicked)有一个[Scriptable]标记,说明这个事件被定义为一个JS脚本事件,另外还要注意这个事件所在的类也要打上[Scriptable]标记,并且在Page的构造方法中要注册一个脚本对象(在本例中是Sample).

3.定义JS事件及JS事件处理方法:

function  createSilverlight()
{
    
var controlID = "SilverlightControl";
    Silverlight.createObjectEx(
{
        source: 
"Page.xaml",
        parentElement: document.getElementById(
"silverlightControlHost"),
        id: controlID,
        properties: 
{
            width: 
"100%",
            height: 
"100%",
            version: 
"1.1"
        }
,
        events: 
{
            onError: 
function(sender, args) 
            
{
                
var errorDiv = document.getElementById("errorLocation");
                
if (errorDiv != null
                
{
                    
var errorText = args.errorType + "" + args.errorMessage;
                            
                    
if (args.ErrorType == "ParserError"
                    
{
                        errorText 
+= "<br>File: " + args.xamlFile;
                        errorText 
+= ", line " + args.lineNumber;
                        errorText 
+= " character " + args.charPosition;
                    }

                    
else if (args.ErrorType == "RuntimeError"
                    
{
                        errorText 
+= "<br>line " + args.lineNumber;
                        errorText 
+= " character " +  args.charPosition;
                    }

                    errorDiv.innerHTML 
= errorText;
                }
    
            }
,
            
            
/*
            *Initialize the events when the page is loaded
            
*/
 
            onLoad:
function(sender,args)
            
{
                sender.Content.Sample.OnButtonClicked 
= function (sender, args){alert("Hello Client Event");};
            }

        }

    }
);

    可以看到这是一个标准的createSilverlight方法,但是不同的是我在这个方法的events参数中增加了一个onLoad事件,在这个事件中我对OnButtonClicked事件进行了初始化,从这一句初始化代码可以看到Sample就是刚才我在C#文件中注册的脚本对象。这个事件的处理函数也可以写在一个独立的JS文件中,只要在Silverlight宿主文件中将其引用就可以了。

   完成这几步后JS事件就定义好了,编译并运行项目就可以在浏览中看到当点击矩形块后会执行OnButtonClicked对应的事件函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值