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

一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下),第1张

概述  概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、   概述

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元素添加、取消事件处理程序。

总结

以上是内存溢出为你收集整理的一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)全部内容,希望文章能够帮你解决一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存