一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
上一篇 / 下一篇 2008-04-11 20:44:37 / 个人分类:经典文章
概述
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元素。ITPUB个人空间%X8~^Ys*O.Jk;PV
ITPUB个人空间!AdTcw
@!}:wY
先来定义一下HTML页面,甚至Silverlight插件的高度。
<divid="parentdiv">
`0q e5\-Vh0<ulid="list">
5Q$y2e&w~ ?,EIr0</ul>
9{I5eY1U @@0</div>
'WY aY TE0<divstyle="height:200px;">
,U1`ti3l`0<asp:SilverlightID="Xaml1"runat="server"ITPUB个人空间\Q;PJ h!cW
Source="~/ClientBin/TerryLee.SilverlightAccessDom2.xap"
;r,EU.w%s B7Te,~0Version="2.0"Width="100%"Height="200px" />ITPUB个人空间 _ Oy&aGzsl'M
</div>
并且为上面的div定义一个简单的样式,以示与Silverlight区分
#parentdivITPUB个人空间#\Z9ZN N\E,h
{
h s0x?r1L2j!IT0background:#FCDFB3;ITPUB个人空间%F,P;]m6K"\b/n
border:solid 1px #FF9900;ITPUB个人空间 e5vS!V1Mlj[n0R
width:500px;ITPUB个人空间 p4qxjl wr2o&g
height:100px;ITPUB个人空间y:A,GM1y
margin-bottom:20px;ITPUB个人空间,MZ)Iq+b[
}
在Silverlight中进行界面布局,XAML如下:
<CanvasBackground="#CDFCAE">ITPUB个人空间5Y1lH2|!^oqf
<TextBlockText="Silverlight Accessing the HTML DOM"Foreground="Red"ITPUB个人空间%A3^$`8l}O Q
Canvas.Top="10"Canvas.Left="30"FontSize="18">
1n `K2\k0h-ndwiN[0</TextBlock>
g0Q;x$n&P0jIn7W*[6I^0<WatermarkedTextBoxx:Name="input"Watermark="请在这里输入"ITPUB个人空间bN p/H B]
Height="40"Width="300"
A2|"^Y zlM~H8L0Canvas.Left="30"Canvas.Top="50">
y.@hA)a!g)M0</WatermarkedTextBox>ITPUB个人空间/|5NC-ef+U)v$K
<Buttonx:Name="createButton"Background="Red"ITPUB个人空间A*MHb H xK7z
Height="40"Width="100"Content="创 建"
'y$V~Z f Z0Canvas.Top="50"Canvas.Left="350"
RfiSk*H0Click="createButton_Click">
e7O4rR!Rp#Q,|i(x0</Button>
nR;p,n:i/J8aN0</Canvas>
编写创建按钮的代码,首先获取到要往里面添加元素的父元素,即我们定义的ul:
HtmlElementparent =HtmlPage.Document.GetElementById("list");
创建一个新的元素li,并设置属性
HtmlElementchild =HtmlPage.Document.CreateElement("li");ITPUB个人空间&k!V/^ ja'B p"tGB
child.SetAttribute("innerText",this.input.Text);
添加新元素到parent中
parent.AppendChild(child);
完整的代码如下:
private voidcreateButton_Click(objectsender,RoutedEventArgse)ITPUB个人空间AadJ2?N
{ITPUB个人空间K1?$Y]-Wh!y
HtmlElementparent =HtmlPage.Document.GetElementById("list");
4T9`;t jm;\-n2T{Y'S0
9[Mr!oWx t0HtmlElementchild =HtmlPage.Document.CreateElement("li");ITPUB个人空间?g6k5r!I+S$gGD
child.SetAttribute("innerText",this.input.Text);ITPUB个人空间r vw?|4S0K)A
ITPUB个人空间-oh,r9T T4d'`
parent.AppendChild(child);
]d0f@7j?G4F0}
运行后创建第一个元素
再次创建一个r8_S6M%S~0^)WC0
ITPUB个人空间6Lx-aczI+f5Q移除DOM元素
既然可以创建元素,对应的也可以删除元素,我们在页面上放上几个<li>元素,然后输入id进行删除。代码如下:
private voiddeleteButton_Click(objectsender,RoutedEventArgse)ITPUB个人空间'[kd!IU
{
*r8r@;N.r/n\0HtmlElementparent =HtmlPage.Document.GetElementById("list");ITPUB个人空间}F#Q9y%HzH
$s9`9QY6` D,i0HtmlElementchild =HtmlPage.Document.GetElementById(this.input.Text);
-uT2G%utG rj0ITPUB个人空间n#B)B^$o$Z$U
parent.RemoveChild(child);
'w7[[H6]p}&o0}
运行后界面上有三个<li>

?8F5@ B Z\aP@0删除其中一个ITPUB个人空间H4ffz/Y_
ITPUB个人空间pr|uFu为DOM注册事件
除了添加和移除DOM元素外,我们还可以为DOM元素附加事件,在下面的例子中我们将通过Silverlight动态创建一个DOM元素<a>,并未它注册单击事件,单击时修改Silverlight中的矩形背景色。先准备相关的HTML。
<divid="parent">ITPUB个人空间r#C\^6R!XjF
2s8n#Z$f%w0ef0</div>ITPUB个人空间M/Al;A;Z.S2cM
<divstyle="height:200px;">
r2Vr[v0<asp:SilverlightID="Xaml1"runat="server"ITPUB个人空间+^4V7xV9UVEYX
Source="~/ClientBin/TerryLee.SilverlightAccessingDom3.xap"ITPUB个人空间(Aj]#bh*m*Wo7G
Version="2.0"Width="100%"Height="200px" />
9{{*mbj0</div>
并且定义两个样式,其中newstyle我们将在Silverlight中为新添加的a元素使用。
#parentITPUB个人空间 Rj!|`,Q
{ITPUB个人空间ddl~ ka$b
background:#FCDFB3;
.i;JQ4^;i9CoG0border:solid 1px #FF9900;
/j]-g RG0width:500px;ITPUB个人空间JJ3] | qV3o2c
height:100px;ITPUB个人空间;} f:f;gMz bxl
margin-bottom:20px;ITPUB个人空间_w e#gR
}
MW}uaJ0.newstyleITPUB个人空间A)RZ R8RgQ
{ITPUB个人空间 _B&J%f9]T-Y
background:#0099FF;
)}k)eB8zZ)UZ4D0border:solid 1px #0000FF;
!C$W5g#p9m$A0}
做一个简单的界面,放置一个按钮和矩形:
<CanvasBackground="#CDFCAE">ITPUB个人空间RQ!J[EWx&vO,x
<TextBlockText="Silverlight Accessing the HTML DOM"Foreground="Red"ITPUB个人空间y AAZ`D*DisN
Canvas.Top="10"Canvas.Left="30"FontSize="18">
w9]LX x0</TextBlock>
8P_E7aqinm&@-U0<Rectanglex:Name="result"Height="40"Width="300"Fill="Red"
B"RL8s,O+LY9x0Canvas.Left="30"Canvas.Top="50"
g*b+]tF!OR0RadiusX="5"RadiusY="5">
k7J/g\/b e_NM0</Rectangle>ITPUB个人空间&?j0Qz.w d r
<Buttonx:Name="addButton"Background="Red"
wDa]i2D7t9~l0Height="40"Width="100"Content="添 加"ITPUB个人空间`&J8}t8U ?6t
Canvas.Top="50"Canvas.Left="350"
M9No0?\ W?Y0Click="addButton_Click">ITPUB个人空间V?+G]$b%sM%m m
</Button>ITPUB个人空间*YZY tQ Z8iy)d
</Canvas>
添加DOM元素,创建一个a元素,并为它设置属性,其中用CssClass来定义它的样式:
HtmlElementparent =HtmlPage.Document.GetElementById("parent");
o4~n$PO U_)w0