|
概述
Silverlight 2 Beta 1版本發(fā)布了,無論從Runtime還是Tools都給我們帶來了很多的驚喜,如支持框架語言Visual Basic, Visual C#, IronRuby, IronPython,對(duì)JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步學(xué)Silverlight 2系列》文章將從Silverlight 2基礎(chǔ)知識(shí)、數(shù)據(jù)與通信、自定義控件、動(dòng)畫、圖形圖像等幾個(gè)方面帶您快速進(jìn)入Silverlight 2開發(fā)。
Silverlight中內(nèi)置了對(duì)于HTML、客戶端腳本等的支持,本文為如何在Silverlight 2中與HTML DOM交互第二部分。在第一部分中主要介紹了如何訪問和修改已有的HTML DOM,我們還可以完全創(chuàng)建一個(gè)新的DOM元素或者移除一個(gè)已有的DOM元素,除此之外,我們還可以為DOM元素添加事件處理。
創(chuàng)建DOM元素
首先我們來看如何創(chuàng)建一個(gè)新的DOM元素,最終的效果如下,當(dāng)我們?cè)谖谋究蛑休斎胛淖趾螅瑔螕魟?chuàng)建,將在上面的區(qū)域中創(chuàng)建一個(gè)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定義一個(gè)簡單的樣式,以示與Silverlight區(qū)分
#parentdiv{ background:#FCDFB3; border:solid 1px #FF9900; width:500px; height:100px; margin-bottom:20px; }
在Silverlight中進(jìn)行界面布局,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="請(qǐng)?jiān)谶@里輸入" Height="40" Width="300" Canvas.Left="30" Canvas.Top="50"> </WatermarkedTextBox> <Button x:Name="createButton" Background="Red" Height="40" Width="100" Content="創(chuàng) 建" Canvas.Top="50" Canvas.Left="350" Click="createButton_Click"> </Button></Canvas>
編寫創(chuàng)建按鈕的代碼,首先獲取到要往里面添加元素的父元素,即我們定義的ul:
HtmlElement parent = HtmlPage.Document.GetElementById("list");
創(chuàng)建一個(gè)新的元素li,并設(shè)置屬性
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);}
運(yùn)行后創(chuàng)建第一個(gè)元素
再次創(chuàng)建一個(gè)
移除DOM元素
既然可以創(chuàng)建元素,對(duì)應(yīng)的也可以刪除元素,我們?cè)陧撁嫔戏派蠋讉€(gè)<li>元素,然后輸入id進(jìn)行刪除。代碼如下:
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);}
刪除其中一個(gè)
為DOM注冊(cè)事件
除了添加和移除DOM元素外,我們還可以為DOM元素附加事件,在下面的例子中我們將通過Silverlight動(dòng)態(tài)創(chuàng)建一個(gè)DOM元素<a>,并未它注冊(cè)單擊事件,單擊時(shí)修改Silverlight中的矩形背景色。先準(zhǔn)備相關(guān)的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>
并且定義兩個(gè)樣式,其中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元素,創(chuàng)建一個(gè)a元素,并為它設(shè)置屬性,其中用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元素單單擊時(shí)我們改變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;}
運(yùn)行一下看看效果如何,起始界面
添加新元素a
單擊改變矩形的背景顏色
HtmlElement也提供了DetachEvent方法,可以取消注冊(cè)事件。
結(jié)束語
本文簡單介紹了如何在Silverlight中添加和移除DOM元素,以及為DOM元素添加、取消事件處理程序。
NET技術(shù):一步一步學(xué)Silverlight :如何在Silverlight中與HTML DOM交互(下),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。