.NEt专家博客!

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

上一篇 / 下一篇  2008-04-13 10:03:40

概述

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进行交互第一部分,访问和修改DOM元素。

访问DOM元素

我们先来看一个简单的示例,如何访问HTML DOM。最终完成的效果如下,我们将在界面放置两个div,分别为div1和div2,下面绿色的区域为Silverlight部分,在第一个文本框中输入div的id并点击显示,将在下面显示出对应div上的文本信息。
9I Oh(vx_7h0ITPUB个人空间L'F1Tc5n,n&GZP

首先我们需要对测试页做一下修改,因为默认的Silverlight插件所占的高度是100%,修改为200px。

<divstyle="height:200px">ITPUB个人空间	YY	B
|+D]
<
asp:SilverlightID="Xaml1"runat="server"
p ~bD+L3r1}I2R)q0
Source="~/ClientBin/TerryLee.SilverlightAccessingHtmlDom1.xap"
7Vf F5IzT{(ku7y0
Version="2.0"Width="100%"Height="200px" />
;KY$H(je0</
div>

同时放置两个div:

<divid="div1">这里是第一个div,id为div1</div>ITPUB个人空间]n,G3b@v
<
divid="div2">这里是第二个div,id为div2</div>

为了看起来明显起见,给它们定义简单的样式:

#div1ITPUB个人空间n?(|2m(d4{
A}Y
{ITPUB个人空间 SRO:r-m-P
background:#FCE2BC;
%CYp_*F(dw0border:solid 1px #FF9900;ITPUB个人空间&Q0M,ImCV h
width:500px;ITPUB个人空间i'J;s)Y/TI
height:50px;
[^8F^X0Q'c0margin-bottom:20px;ITPUB个人空间9p$W/Q-Ys
}ITPUB个人空间3V7m(E T _S8Y5h"oj
#div2
:[d6Yz ~?0
{ITPUB个人空间4q]#XOm9XaA r
background:#BCC8FC;
Nt}C_IM I0border:solid 1px #4769F9;
Y`(LW~2u5B0width:500px;
v{C+j Y4R0height:50px;ITPUB个人空间8UU0W$D^7x]
margin-bottom:20px;ITPUB个人空间 \)s g;Me^
}

实现Silverlight的界面布局,使用Canvas,给它的背景定义为浅绿色,XAML如下:

<CanvasBackground="#D5FCDF">ITPUB个人空间$x8d]`*V8B6R~]
<
TextBlockText="Silverlight Accessing the HTML DOM"Foreground="Red"
g2nBHrg[0
Canvas.Top="10"Canvas.Left="30"FontSize="18">
3ywY4bF$l7l0</
TextBlock>ITPUB个人空间5pK6|6MRALh ~
<
WatermarkedTextBoxx:Name="input"Watermark="请在这里输入"ITPUB个人空间3a2l^7j*ShT.Z
Height="40"Width="300"
Z/Z-D\H wL G/_j0
Canvas.Left="30"Canvas.Top="50">
3d-uq6Q1lm'X0iz0</
WatermarkedTextBox>ITPUB个人空间#M[9L'WnY:@0U+T:bY
<
WatermarkedTextBoxx:Name="result"Watermark="这里显示结果"
*?7h#n!x6y:qh0
Height="40"Width="300"ITPUB个人空间3m:x\;X1lz&Tbw1O
Canvas.Left="30"Canvas.Top="100">
e:VO5~0f$c9^'TJ0</
WatermarkedTextBox>
L-xCr1Vj N)bt(I#P0<
Buttonx:Name="displayButton"Background="Red"
T}Aj4O0q0
Height="40"Width="100"Content="显 示"
_)U eU%}0
Canvas.Top="50"Canvas.Left="350"
W)w${G{8i4D2zZg0
Click="displayButton_Click">
X/e~$^ C)rQ0</
Button>
e~ V&y c@6vZx+t0</
Canvas>

实现对HTML DOM的访问。Silverlight 2在命名空间System.Windows.Browser下内置了很多对于HTML DOM访问和操作的支持,我们最常用的一个对象是HtmlElement,通过HtmlPage静态类可以获取到当前页面的文档模型,最后再调用 GetElementsByTagName或者GetElementById方法。

HtmlElementelement =HtmlPage.Document.GetElementById(this.input.Text);

这样我们就获取到了一个DOM元素,再使用它的GetAttribute可以获取到相关属性:

this.result.Text = element.GetAttribute("innerText");
完整的代码如下:
private voiddisplayButton_Click(objectsender,RoutedEventArgse)ITPUB个人空间c7Ot{,g)a
{
o$W_"^XF*hm0HtmlElementelement =HtmlPage.Document.GetElementById(this.input.Text);ITPUB个人空间*USV @"v `&`7X
ITPUB个人空间#x8W(ur%\u ~
this.result.Text = element.GetAttribute("innerText");
7w yJ;t"I;N0Cd+h a E0}

运行后我们在第一个文本框中输入div1:
y GvoQY;RG5O*gp6?0
+P w5bM$m5k3R9t {0单击显示后,将在第二个文本框中显示出div1的文本内容:ITPUB个人空间Ces-R cQ6?
ITPUB个人空间_z6gA,j%z1]

操作DOM元素

通过上面的示例我们已经知道了如何去访问HTML DOM,现在再看一下对HTML DOM进行操作,如我们如何改变DOM的内容等,还是使用上面的示例,稍作一下修改,在第一个文本框中输入DOM的id,在第二个文本框中输入要修改的内容。ITPUB个人空间]S)u"e7{k1y

"w2E7N [ du"Y/h0

其实这里非常简单,只要对代码做一下小的改动,使用SetAttribute方法就可以了,第一个参数指定属性名,第二个参数指定属性值。如:

private voiddisplayButton_Click(objectsender,RoutedEventArgse)
X{*Dr/as g0{
@`;bvG#C!J0HtmlElementelement =HtmlPage.Document.GetElementById(this.input.Text);
:V OYn u9Ub0ITPUB个人空间 H:JIuEv
element.SetAttribute("innerText",this.result.Text);
7oe/P(\@&f0}
运行后,输入div2和一些内容,单击确定:
5xkE+n8c-VH M0
z N4T C:V:V4s0

修改DOM元素样式

除了上面提到的GetAttribute和SetAttribute这一组方法之外,HtmlElement还提供了一组GetStyleAttribute和SetStyleAttribute方法,用于获取和设置DOM的样式,如:

private voiddisplayButton_Click(objectsender,RoutedEventArgse)ITPUB个人空间D
_eeV~,k
{
I-{5f"yuv/P5z0HtmlElementelement =HtmlPage.Document.GetElementById(this.input.Text);
U&`#O i2EUc0ITPUB个人空间G%n0Z"G:@S'A
element.SetStyleAttribute("width",this.result.Text);ITPUB个人空间M"m.l9if1m
element.SetStyleAttribute("height",this.result.Text);ITPUB个人空间[ c%e8C[w d
}

运行后,输入div1和100,效果如下:
SES)Ir0
6A$`w;?)f+D0

结束语

本文介绍了如何在Silverlight 中访问DOM以及修改DOM的属性等,下一篇我将介绍如何改变DOM的结构,如添加和移除DOM元素以及为DOM元素注册事件等。

作者:TerryLee
-i+rkq7x V(px,h7|$J0出处:http://terrylee.cnblogs.com


yf"SJpDM0


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2012-02-10  
   1234
567891011
12131415161718
19202122232425
26272829   

数据统计

  • 访问量: 665817
  • 日志数: 3733
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2010-12-31

RSS订阅

Open Toolbar