silvelight中操作html页面元素

  在上一篇文章(silverlight与javascript交互操作 )中,我们通过属性绑定([ScriptableType])的方式
进行了js与silverlight之间的互操作.
   
    其实只就实现这个DEMO而言,还有更加直接简单的方式,就是使用:    
    HtmlPage.Document.GetElementById()

    首先,我们需要建立一个项目silverlight项目, 名称为: HtmlDOM
    
    还是将上一篇中的EmployeeInfo.cs拷贝到当前项目下,并将其修改成如下内容:  

 

public   class  EmployeeInfo
{
    
///   <summary>
    
///  雇员编号
    
///   </summary>
     public   int  EmployeeNo {  get set ; }
    
///   <summary>
    
///  雇员名称
    
///   </summary>
     public   string  EmployeeName {  get set ; }
    
///   <summary>
    
///  地址
    
///   </summary>
     public   string  Address {  get set ; }
}
///   <summary>
///  雇员事件参数(用于完成与js绑定事件参数)
///   </summary>
public   class  EmployeeInfoEventArgs : EventArgs
{
    
public  EmployeeInfo employeeInfo {  get set ; }
}

///   <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  =   " 李四 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10003 , EmployeeName  =   " 王五 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10004 , EmployeeName  =   " 马六 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10005 , EmployeeName  =   " 王大麻子 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10006 , EmployeeName  =   " 王宝强 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10007 , EmployeeName  =   " 王蛋蛋 "  , Address  =   " 北京 " },
            
new  EmployeeInfo(){EmployeeNo  =   10008 , EmployeeName  =   " 王五强 "  , Address  =   " 北京 " }
        };
    }

    
///   <summary>
    
///  获取指定数量的雇员数据
    
///   </summary>
    
///   <param name="count"> 要获取的雇员信息数 </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);
    }
}


  而xaml代码还是延用上一篇文章中的内容如下:

< Grid  x:Name ="LayoutRoot"  Background ="White" >
    
< Grid.RowDefinitions >
        
< RowDefinition  Height ="300"   />
    
</ Grid.RowDefinitions >
    
< my:DataGrid   x:Name ="EmployeeList"   Grid.Row ="1"   AutoGenerateColumns ="True"  Height ="280"  Margin ="5,5,5,5"  AlternatingRowBackground ="AliceBlue"  RowBackground ="BlanchedAlmond" >
    
</ my:DataGrid >
</ Grid >

    
    而下面的就是相应的page.xaml.cs代码,如下(相关内容见注释):    

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)
    {  
// 创建"加载数据"的button并绑定相应的onclick事件
        HtmlElement button  =  CreateElement( " input " );
        button.SetAttribute(
" type " " button " );
        button.SetAttribute(
" value " " 加载数据 " );
        button.AttachEvent(
" onclick " new  EventHandler < HtmlEventArgs > (button_Click));

        GetElement(
" EmployeeManage " ).AppendChild(button);
    }

    
void  button_Click( object  sender, HtmlEventArgs e)
    {
        LoadData(
7 ); // 先取出7条数据
    }


    
///   <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;

            GetElement(
" employeeNo " ).SetAttribute( " value " , employeeInfo.EmployeeNo.ToString());
            GetElement(
" employeeName " ).SetAttribute( " value " , employeeInfo.EmployeeName);
            GetElement(
" address " ).SetAttribute( " value " , employeeInfo.Address);
        }
    }
    
    
///   <summary>
    
///  获取指定ID的HTML元素
    
///   </summary>
    
///   <param name="ElementID"></param>
    
///   <returns></returns>
    HtmlElement GetElement( string  ElementID)
    {
        
return  HtmlPage.Document.GetElementById(ElementID);
    }

    
///   <summary>
    
///  创建指定tagname的元素
    
///   </summary>
    
///   <param name="tagname"></param>
    
///   <returns></returns>
    HtmlElement CreateElement( string  tagname)
    {
        
return  HtmlPage.Document.CreateElement( " input " );
    }

    
// 这里必须声明是public,否则js调用该方法时会报错
     public   void  LoadData( int  count)
    {
        
// 加载指定数据的雇员信息
        EmployeeList.ItemsSource  =   new  EmployeeManager().GetEmployeeList(count);
    }
}

  而相应的aspx页面就不用再多写什么js脚本了.大家下载本DEMO中的源码后一看便知:)

好了,今天的内容就到这里了:)

源码下载链接,请点击这里:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值