• silvelight中操作html页面元素


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

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

     

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

    /// <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中的源码后一看便知:)

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

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

  • 相关阅读:
    gulp入门指南
    SASS用法指南
    JavaScript中本地对象、内置对象和宿主对象
    Javascript模块化编程(三):require.js的用法
    用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。
    你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
    编写一个参数JavaScript函数parseQueryString,它的用途是把url参数解析为一个对象
    给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组
    改变checkbox的背景颜色
    使用SSH密钥连接Github
  • 原文地址:https://www.cnblogs.com/daizhj/p/1216499.html
Copyright © 2020-2023  润新知