|
概述
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元素。
先來定義一下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; }
<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);}
刪除其中一個
為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;}
運行一下看看效果如何,起始界面
添加新元素a
單擊改變矩形的背景顏色
HtmlElement也提供了DetachEvent方法,可以取消注冊事件。
結束語
本文簡單介紹了如何在Silverlight中添加和移除DOM元素,以及為DOM元素添加、取消事件處理程序。
NET技術:一步一步學Silverlight :如何在Silverlight中與HTML DOM交互(下),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。