版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67260

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。
Silverlight中内置了对于HTML、客户端脚本等的支持,本文为如何在Silverlight 2中与HTML DOM交互第二部分。在第一部分中主要介绍了如何访问和修改已有的HTML DOM,我们还可以完全创建一个新的DOM元素或者移除一个已有的DOM元素,除此之外,我们还可以为DOM元素添加事件处理。

创建DOM元素

首先我们来看如何创建一个新的DOM元素,最终的效果如下,当我们在文本框中输入文字后,单击创建,将在上面的区域中创建一个li元素。
先来定义一下HTML页面,甚至Silverlight插件的高度。
<div id="parentdiv"><ul id="list"></ul></div><div  style="height:200px;"><asp:Silverlight ID="Xaml1" runat="server"Source="~/ClientBin/TerryLee.SilverlightAccessDom2.xap"Version="2.0" Width="100%" Height="200px" /></div>
并且为上面的div定义一个简单的样式,以示与Silverlight区分
#parentdiv{background:#FCDFB3;border:solid 1px #FF9900;width:500px;height:100px;margin-bottom:20px;}
在Silverlight中进行界面布局,XAML如下:
<Canvas Background="#CDFCAE"><TextBlock Text="Silverlight Accessing the HTML DOM" Foreground="Red"Canvas.Top="10" Canvas.Left="30" FontSize="18"></TextBlock><WatermarkedTextBox x:Name="input" Watermark="请在这里输入"Height="40" Width="300"Canvas.Left="30" Canvas.Top="50"></WatermarkedTextBox><Button x:Name="createButton" Background="Red"Height="40" Width="100" Content="创 建"Canvas.Top="50" Canvas.Left="350"Click="createButton_Click"></Button></Canvas>
编写创建按钮的代码,首先获取到要往里面添加元素的父元素,即我们定义的ul:
HtmlElement parent = HtmlPage.Document.GetElementById("list");
创建一个新的元素li,并设置属性
HtmlElement child = HtmlPage.Document.CreateElement("li");child.SetAttribute("innerText", this.input.Text);
添加新元素到parent中
parent.AppendChild(child);
完整的代码如下:
private void createButton_Click(object sender, RoutedEventArgs e){HtmlElement parent = HtmlPage.Document.GetElementById("list");HtmlElement child = HtmlPage.Document.CreateElement("li");child.SetAttribute("innerText", this.input.Text);parent.AppendChild(child);}
运行后创建第一个元素
再次创建一个

移除DOM元素

既然可以创建元素,对应的也可以删除元素,我们在页面上放上几个<li>元素,然后输入id进行删除。代码如下:
private void deleteButton_Click(object sender, RoutedEventArgs e){HtmlElement parent = HtmlPage.Document.GetElementById("list");HtmlElement child = HtmlPage.Document.GetElementById(this.input.Text);parent.RemoveChild(child);}
运行后界面上有三个<li>
删除其中一个

为DOM注册事件

除了添加和移除DOM元素外,我们还可以为DOM元素附加事件,在下面的例子中我们将通过Silverlight动态创建一个DOM元素<a>,并未它注册单击事件,单击时修改Silverlight中的矩形背景色。先准备相关的HTML。
<div id="parent"></div><div  style="height:200px;"><asp:Silverlight ID="Xaml1" runat="server"Source="~/ClientBin/TerryLee.SilverlightAccessingDom3.xap"Version="2.0" Width="100%" Height="200px" /></div>
并且定义两个样式,其中newstyle我们将在Silverlight中为新添加的a元素使用。
#parent{background:#FCDFB3;border:solid 1px #FF9900;width:500px;height:100px;margin-bottom:20px;}.newstyle{background:#0099FF;border:solid 1px #0000FF;}
做一个简单的界面,放置一个按钮和矩形:
<Canvas Background="#CDFCAE"><TextBlock Text="Silverlight Accessing the HTML DOM" Foreground="Red"Canvas.Top="10" Canvas.Left="30" FontSize="18"></TextBlock><Rectangle x:Name="result" Height="40" Width="300" Fill="Red"Canvas.Left="30" Canvas.Top="50"RadiusX="5" RadiusY="5"></Rectangle><Button x:Name="addButton" Background="Red"Height="40" Width="100" Content="添 加"Canvas.Top="50" Canvas.Left="350"Click="addButton_Click"></Button></Canvas>
添加DOM元素,创建一个a元素,并为它设置属性,其中用CssClass来定义它的样式:
HtmlElement parent = HtmlPage.Document.GetElementById("parent");HtmlElement button = HtmlPage.Document.CreateElement("a");button.SetAttribute("innerText", "改变Silverlight中的颜色");button.SetAttribute("href","#");button.CssClass = "newstyle";parent.AppendChild(button);
为a元素附加onclick事件,HtmlElement提供了AttachEvent方法用来附加事件,使用泛型的EventHandler,在a元素单单击时我们改变Silverlight中的矩形填充色和边框。
button.AttachEvent("onclick", new EventHandler<HtmlEventArgs>(button_Click));
void button_Click(object sender, HtmlEventArgs e){result.Stroke = new SolidColorBrush(Colors.Black);result.Fill = new SolidColorBrush(Colors.Green);result.StrokeThickness = 2;}
完整的代码如下:
private void addButton_Click(object sender, RoutedEventArgs e){HtmlElement parent = HtmlPage.Document.GetElementById("parent");HtmlElement button = HtmlPage.Document.CreateElement("a");button.SetAttribute("innerText", "改变Silverlight中的颜色");button.SetAttribute("href","#");button.CssClass = "newstyle";parent.AppendChild(button);button.AttachEvent("onclick", new EventHandler<HtmlEventArgs>(button_Click));}void button_Click(object sender, HtmlEventArgs e){result.Stroke = new SolidColorBrush(Colors.Black);result.Fill = new SolidColorBrush(Colors.Green);result.StrokeThickness = 2;}
运行一下看看效果如何,起始界面
添加新元素a
单击改变矩形的背景颜色
HtmlElement也提供了DetachEvent方法,可以取消注册事件。

结束语

本文简单介绍了如何在Silverlight中添加和移除DOM元素,以及为DOM元素添加、取消事件处理程序。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67260

本文出自 51CTO.COM技术博客

转载于:https://www.cnblogs.com/hdjjun/archive/2008/12/24/1361471.html

一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)相关推荐

  1. 算法之路,带你轻松学废算法系列之字符串匹配(中)

    文章目录 字符串匹配中 前言 KMP算法 KMP算法的基本原理 失效函数计算方法 问题解答 KMP 算法复杂度分析 小结 Trie树 什么是Trie树 如何实现一棵 Trie 树? Trie树的构造 ...

  2. MATLAB从入门到精通系列之如何在MATLAB中导入excel单sheet页及多sheet页表格

    前言 一个excel表格中可能有一个Sheet或多个Sheet,虽然在MATLAB中只需要加些代码即可轻松实现,但是为了帮助各位小伙伴更容易理解. 因此,分为两部分讲解:1)excel表格中只有一个S ...

  3. mysql显示表已存在_「Docker系列」 如何在Docker中部署MySQL数据库?

    Docker为部署和测试应用程序和数据库提供了许多优势,这些应用程序和数据库是应用程序不可或缺的一部分,因此很值得学习如何在Docker容器中部署和运行数据库. 本文中,我们会重点关注如下重点: 为M ...

  4. Java系列: 如何在Eclipse中安装Memory Analyzer插件

    一.找到eclipse的插件安装对话框: help->install new software ->work with 二.输入Memory Analyzer的安装路径 具体可以到http ...

  5. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScriptjavascript

    一步一步学silverlight 2系列(21):如何在silverlight中调用javascript 概述 silverlight 2 beta 1版本发布了,无论从runtime还是tools都 ...

  6. Web服务初探:用Demo学Web服务系列(7)——XML的相关知识

    我们前面的<Web服务初探:用Demo学Web服务系列>六个随笔中已经探讨完了C/S程序对Web Services的调用,大家感觉难吗?下面我们就有关的Web Services的原理讲解一 ...

  7. Net程序员学用Oracle系列(1):导航目录

    原文:https://www.cnblogs.com/hanzongze/p/oracle-catalog.html .Net程序员学用Oracle系列(1):导航目录 .Net程序员学用Oracle ...

  8. 一步一步学Silverlight 2系列(3):界面布局

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(10):使用用户控件

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

最新文章

  1. XAML实时显示更新插件LiveXAML
  2. 微信小程序朋友圈分享图片生成方案实现
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第8章-有输入时滞的二阶多智能体系统的多一致
  4. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
  5. Linux 实操 —— Linux 系统性能分析
  6. 加固工程验收规范50550_轻质隔墙怎样做才规范,看完这3点
  7. [JEEWX问题修复] JeeWX开源版2.3几处代码修改。
  8. openssh 加固
  9. DotNetNuke 04.05.05 安装
  10. uart项目验证(一)-uart协议与uart ip的理解
  11. 吴伯凡-认知方法论-认知中的信道与噪音
  12. vue组件之Prop属性
  13. 手机镜头,噪声建模,ISP,ISO与analog gain
  14. react native学习笔记29——动画篇 Animated高级动画
  15. wps通过vb宏来查看文档中使用的所有字体
  16. Win10右键文件无响应崩溃
  17. B2C网站建设的要点分析
  18. html网页转换成psd,网页设计PSD到HTML – 更直接的方式?
  19. matplotlib绘制极坐标图
  20. CAP理论与ACID理论

热门文章

  1. 微服务架构 接口交互问题_架构师的故事:设计微服务架构
  2. object.assign
  3. This file can not be opened as a file descriptor; it is probably compressed
  4. 常见八种安卓开发报错的方式
  5. 前端开发API及规范
  6. vundle按照YouComplete
  7. Webwork 学习之路【02】前端OGNL试练
  8. 炫酷实用的jQuery插件 涵盖菜单、按钮、图片
  9. Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)
  10. Python 生成器与列表解析