silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了silverlight与javascript交互操作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

  在silverlight开发中,我们可以使用js来调用silverlight中的方法(当然方法上要捆绑相应属性),也可以将指定 的js方法绑定到silverlight应用中的事件上.本DEMO演示了通过js调用完成silverlight数据列表控件(DataGrid)的数 据绑定操作,并通过DataGrid的employeeLisT_BeginningCellEdit事件将当前选取的数据行信息

  在silverlight开发中,我们可以使用js来调用silverlight中的方法(当然方法上要捆绑相应属性),也可以将指定
的js方法绑定到silverlight应用中的事件上.本DEMO演示了通过js调用完成silverlight数据列表控件(DataGrid)的数
据绑定操作,并通过DataGrid的employeeLisT_BeginningCellEdit事件将当前选取的数据行信息返回到js所绑定的
事件参数上,并调用该js方法显示选中数据行信息,如下图所示:

           

silverlight与javascript交互操作


  
     下面介绍一下主要的开发过程:)
  
     首先,我们需要建立一个Silverlight Application ,名称为:Silverlight_JS_call.
  
     然后我们要在当前的项目中加入一个文件名称为:employeeInfo.cs.
  
     下面是相应的代码,相关内容见注释:  

[ScriptableType]
public   class  employeeInfo
{
    
///   <sumMary>
    
///  雇员编号
    
///   </sumMary>
    [ScriptableMember]
    
public   int  employeeNo {  get set ; }
    
///   <sumMary>
    
///  雇员名称
    
///   </sumMary>
    [ScriptableMember]
    
public   String  employeename {  get set ; }
    
///   <sumMary>
    
///  地址
    
///   </sumMary>
    [ScriptableMember]
    
public   String  Address {  get set ; }
}
///   <sumMary>
///  雇员事件参数(用于完成与js绑定事件参数)
///   </sumMary>
[ScriptableType]
public   class  employeeInfoEventArgs : EventArgs
{
    [ScriptableMember]
    
public  employeeInfo employeeInfo{  get set ; }
}

///   <sumMary>
///  要注册并在页面中使用的js调用脚本对象
///   </sumMary>
[ScriptableType]
public   class  JavaScriptabLeobject
{
    
///   <sumMary>
    
///  js捆绑的事件handler
    
///   </sumMary>
    [ScriptableMember]
    
public   event  EventHandler < employeeInfoEventArgs >  SELEctemployeeInfo;

    
public   void  OnSELEctemployeeInfo(employeeInfo employeeinfo)
    {
        
if  (SELEctemployeeInfo  !=   null )
        {
            SELEctemployeeInfo(
this new  employeeInfoEventArgs()
            {
                employeeInfo 
=  employeeinfo
            });
        }
    }
}

///   <sumMary>
///  雇员信息管理类
///   </sumMary>
public   class  employeeManager
{
    
public  IEnumerable < employeeInfo >  employeeList;
    
///   <sumMary>
    
///  初始化会员数据
    
///   </sumMary>
     public  employeeManager()
    {
        
// 初始化雇员数据
        employeeList  =   new  List < employeeInfo > ()
        {
            
new  employeeInfo(){employeeNo  =   10001 employeename  =   " 张三 "  , Address  =   " 北京 " },
            
new  employeeInfo(){employeeNo  =   10002 employeename  =   " 李四 "  ,
            
new  employeeInfo(){employeeNo  =   10003 employeename  =   " 王五 "  ,
            
new  employeeInfo(){employeeNo  =   10004 employeename  =   " 马六 "  ,
            
new  employeeInfo(){employeeNo  =   10005 employeename  =   " 王大麻子 "  ,
            
new  employeeInfo(){employeeNo  =   10006 employeename  =   " 王宝强 "  ,
            
new  employeeInfo(){employeeNo  =   10007 employeename  =   " 王蛋蛋 "  ,
            
new  employeeInfo(){employeeNo  =   10008 employeename  =   " 王五 "  , Address  =   " 北京 " }
        };
    }

    
///   <sumMary>
    
///  @L_674_20@指定数量的雇员数据
    
///   </sumMary>
    
///   <param NAME="count"> 要@L_674_20@的雇员信息数 </param>
    
///   <returns></returns>     
     public  IEnumerable < employeeInfo >  GetemployeeList( int  count)
    {
        
return  (from e  in  employeeList
                    SELEct 
new  employeeInfo
                    {
                        employeeNo 
=  e.employeeNo,
                        employeename 
=  e.employeename,
                        Address 
=  e.Address

                    }).Take(count);
    }
}

    上面代码中要注意的是[ScriptableType]和[ScriptableMember],前者允许Silverlight把类型暴露给脚本,后者
则会把成员方法属性暴露给脚本.

  而下面的代码就是page.xaml中的内容:  

< UserControl  xmlns:my ="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"   x:Class ="Silverlight_JS_call.Page"
    xmlns
="http://scheR_607_11845@as.microsoft.com/client/2007"  
    xmlns:x
="http://scheR_607_11845@as.microsoft.com/winfx/2006/xaml"  
    Width
="400"  Height ="300" >
    
< Grid  x:Name ="LayoutRoot"  BACkground ="White" >
        
< Grid.RowDeFinitions >
            
< RowDeFinitio Height ="300"   />
        
</ Grid.RowDeFinitions >
        
< @H_549_491@my:DataGrid   x:Name ="employeeList"   Grid.Row ="1"   AutoGeneratecolumns ="True"  Height ="280"  Margin ="5,5,5"  AlternaTingRowBACkground ="AliceBlue"  rowBACkground ="BlanchedAlmond" >
        
</ @H_549_491@my:DataGrid >
   
</ Grid >
</ UserControl >

  下面则是相应的page.xaml.cs文件内容(相关内容见注释):  

[ScriptableType]
public   partial   class  Page : UserControl
{
    
public  Page()
    {
        InitializeComponent();
        
this .Loaded  +=  Page_Loaded;
        
this .employeeList.beginningCellEdit  += new  EventHandler < DataGridCellEdiTingCancelEventArgs > (employeeLisT_BeginningCellEdit); 
    }
    
     
    
void  Page_Loaded( object  sender, routedEventArgs E)
    {
        JavaScriptabLeobject 
=   new  JavaScriptabLeobject();
        
// 注册js可用的类型(详情见Silverlight_JS_callTestPage.aspx中的js代码
        HtmlPage.RegisterScriptabLeobject( " employeeObject " , JavaScriptabLeobject);
        HtmlPage.RegisterScriptabLeobject(
" Page " this );
    }
    
    
///   <sumMary>
    
///  击编辑雇员列表信息事件
    
///   </sumMary>
    
///   <param NAME="sender"></param>
    
///   <param NAME="e"></param>
     void  employeeLisT_BeginningCellEdit( object  sender, DataGridCellEdiTingCancelEventArgs E)
    {
        
// 当有要编辑的信息时
         if  (employeeList.SELEctedItem  !=   null )
        {
            employeeInfo employeeInfo 
=  employeeList.SELEctedItem  as  employeeInfo;
            
// 执行选中信息事件操作(最终会执行js所绑定的function代码)
            JavaScriptabLeobject.onSELEctemployeeInfo(employeeInfo);
        }
    }     

  
// 这里必须声明是public,否则js调用方法时会报错
    [ScriptableMember]
    
public   void  LoadData( int  count)
    {
        
// 加载指定数据的雇员信息
        employeeList.Itemssourc =   new  employeeManager().GetemployeeList(count);
    }

    JavaScriptabLeobject JavaScriptabLeobject;       
}


    上面代码要注意的是RegisterScriptabLeobject方法调用,它用来注册可被脚本使用的对象实例,
与它相对应的还有一个方法RegisterCreateableType,它用于注册可被脚本使用的类型.

  到这里,基本上完成的cs代码的开发工作.下面则是相应的js调用以及事件绑定代码了,请看:

< script type = " text/javascript " >
   
// 显示选取的雇员信息
    // 注:args为cs中的employeeInfoEventArgs类型实例
    function  ShowSELEctemployeeInfo(sender, args)
   {  
      $get(
" employeeNo " ).value  =  args.employeeInfo.employeeNo;
      $get(
" employeename " ).value  =  args.employeeInfo.employeename;
      $get(
" employeeAddress " ).value  =  args.employeeInfo.Address;
      $get(
" results " ).style.display  =   ' block ' ;
   }
   
   
// 初始化操作,绑定到input元素("加载数据")的click事件上,详情参见aspx文件
    function  Init(obj)
   { 
       
// 绑定上面的js函数到silverlight的事件handler
       $get( " Xaml1 " ).content.employeeObject.SELEctemployeeInfo  =  ShowSELEctemployeeInfo;
       
       
// 加载雇员信息     
       $get( " Xaml1 " ).content.Page.LoadData(parseInt(obj.titlE));              
   }
< / script>

           
    另外在进行初始化操作,这里使用了onclick方法来执行操作,而不是直接运行相应代码.原因是
silverlight对象加载是使用了异步方式,这样会造成对象实例化完成时间迟于页面JS脚本的运行时间.
这样设计的原因,我个人认为主要是UE方面的虑.而这时如果脚本中直接调用对象实例化的属性
方法时,会出现对象未知的情况.
      
    好了,今天的内容就到这里了.
   
    源码下载链接,请点击这里:)

@H_955_1419@

大佬总结

以上是大佬教程为你收集整理的silverlight与javascript交互操作全部内容,希望文章能够帮你解决silverlight与javascript交互操作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。