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 >
<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 >
<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,255); orphans:2; wIDows:2"> 运行一下看看效果如何,起始界面
添加新元素a
单击改变矩形的背景颜色
HTMLElement也提供了DetachEvent方法,可以取消注册事件。
结束语
本文简单介绍了如何在Silverlight中添加和移除DOM元素,以及为DOM元素添 加、取消事件处理程序。
总结以上是内存溢出为你收集整理的学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)全部内容,希望文章能够帮你解决学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)