惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recorded Future
Recorded Future
爱范儿
爱范儿
Y
Y Combinator Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
腾讯CDC
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
G
GRAHAM CLULEY
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
T
The Blog of Author Tim Ferriss
T
The Exploit Database - CXSecurity.com
博客园 - 叶小钗
Latest news
Latest news
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
量子位
S
Security @ Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
IT之家
IT之家
U
Unit 42
Project Zero
Project Zero
B
Blog
博客园 - 【当耐特】
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
F
Full Disclosure
Vercel News
Vercel News
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
T
Threatpost
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
T
Tor Project blog
M
MIT News - Artificial intelligence
V
V2EX

博客园 - 帅死活该

Flex各类型坐标转换(全局、本地、内容坐标间转换) Oracle Spatial中的空间索引 [转] ORACLE纯SQL实现多行合并一行[转] Oracle提供的序号函数 FLEX动态创建事件 自定义组件开发 第二节 MXML组件开发 Flex项目调试及日志记录 Flex或Flash的跨域访问的解决方案 - 帅死活该 - 博客园 ArcEngine数据删除几种方法和性能比较[转] - 帅死活该 - 博客园 组件服务-计算机-我的电脑右键无属性,组件服务打不开 FLEX中使用BitmapFill的source属性指定SVG类文件 - 帅死活该 - 博客园 [转]ArcSDE数据被锁定后的解锁方法 ArcGIS server如何将自己的小地图叠加到Google maps或者Virtual Earth上[转] 一个ArcGIS网络分析的最短路径例子||A Network Analyst Shortest Route of ArcGIS[转] ArcGIS的网络分析[转] Flex动画效果与变换(三)[转] Flex的动画效果与变换!(二)[转] Flex动画效果与变换(一)[转] Microsoft 解决方案框架 — MSF 项目管理准则 v. 1.1[转]
如何在Silverlight中与HTML DOM交互
帅死活该 · 2008-09-16 · via 博客园 - 帅死活该

Silverlight中内置了对于HTML、客户端脚本等的支持,本文为如何在Silverlight 2中与HTML DOM交互第二部分。在第一部分中主要介绍了如何访问和修改已有的HTML DOM,我们还可以完全创建一个新的DOM元素或者移除一个已有的DOM元素,除此之外,我们还可以为DOM元素添加事件处理。

创建DOM元素

首先我们来看如何创建一个新的DOM元素,最终的效果如下,当我们在文本框中输入文字后,单击创建,将在上面的区域中创建一个li元素。
单击显示全图,Ctrl+滚轮缩放图片

先来定义一下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);
}

运行后创建第一个元素
单击显示全图,Ctrl+滚轮缩放图片

再次创建一个
单击显示全图,Ctrl+滚轮缩放图片

移除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>
单击显示全图,Ctrl+滚轮缩放图片

删除其中一个
单击显示全图,Ctrl+滚轮缩放图片

为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;
}

运行一下看看效果如何,起始界面
单击显示全图,Ctrl+滚轮缩放图片

添加新元素a
单击显示全图,Ctrl+滚轮缩放图片

单击改变矩形的背景颜色
单击显示全图,Ctrl+滚轮缩放图片

HtmlElement也提供了DetachEvent方法,可以取消注册事件。

结束语

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