#眉標=Silverlight #副標=Silverlight開發技術(6) #大標=ASP.NET AJAX與Silverlight的完美整合 #作者=文/圖 董大偉 ==<反灰>=========== ScriptManager.RegisterStartupScript (Me.Page, GetType(String), key值,要動態產生的JavaScript, True) ================       ==程式1============== ================       ==程式2============== 0000: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 0001: Dim xaml As String = " " 0002: Dim Js As String = "" 0003: 'Strings.Chr(34) →『"』 0004: '底下的程式碼組出JavaScript語法 0005: '將需要動態顯示的Xaml Code填入xamlCode變數 0006: Js += "var xamlCode = " & Strings.Chr(34) & xaml & Strings.Chr(34) & ";" 0007: '利用xamlCode建立Xaml物件 0008: Js += "var XamlElement = document.getElementById('Xaml1').content.createFromXaml(xamlCode);" 0009: '將Xaml物件加入Root Canvas 0010: Js += "document.getElementById('Xaml1').content.root.children.add(XamlElement);" 0011: '把上面這串JavaScript以非同步方式動態Render到前端 0012: ScriptManager.RegisterStartupScript(Me.Page, GetType(String), "", Js, True) 0013: End Sub 0014:End Class ================    ==<反灰>=========== var xamlCode = ""; var XamlElement = document.getElementById('Xaml1').content.createFromXaml(xamlCode);" document.getElementById('Xaml1').content.root.children.add(XamlElement); ================    ==程式3============== //動態建立 Xaml function CreateXaml(SilverlightObject, xaml, CanvasName) { //抓取host var theHost = document.getElementById(SilverlightObject); if (theHost==null) {alert('找不到 SilverlightObject ['+SilverlightObject+']');return;} //建立Xaml指令碼 var xamlElement=theHost.content.createFromXaml(xaml); if (xamlElement==null) {alert('無法建立 xaml ['+xaml+']');return;} //抓取Canvas if (CanvasName=='') { //如果傳入的資料是空白,則抓取Root var Canvas1 = theHost.content.root; } else { //否則抓取指定的Canvas var Canvas1 = theHost.content.findName(CanvasName); } //如果實在找不到Canvas if (Canvas1==null) {alert('找不到 Canvas ['+CanvasName+']');return;} //動態在Canvas上加入Xaml Canvas1.children.add(xamlElement); } ================    ==<反灰>=========== CreateXaml('Xaml1', '', 'Page'); ================    ==程式4 ============== Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) '取得Xaml1控制項的ID Dim SilverlightObject As String = Me.Xaml1.ClientID '抓取頁面上的TextBox內容(Xaml碼) Dim xaml As String = Me.TextBox1.Text '設定這段Xaml碼要加入哪一個Canvas Dim CanvasName As String = "Page" '把Enter符號消去 xaml = xaml.Replace(Strings.Chr(13) + Strings.Chr(10), "") '呼叫DoAsnycJavaScript以同步方式執行JavaScript DoAsnycJavaScript("CreateXaml('" & SilverlightObject & "',' " & xaml & "','" & CanvasName & "');") End Sub '非同步方式執行JavaScript Sub DoAsnycJavaScript(ByVal js As String) Dim key As String '建立為一Key值 key = New System.Guid().ToString & Rnd() & Now.Ticks '非同步方式執行JavaScript ScriptManager.RegisterStartupScript(Me.Page, GetType(String), key, js, True) End Sub ================          ==程式5 ============== //修改屬性 function SetValue(SilverlightObject, ElementName, Propery, Value) { //修改屬性 var theHost = document.getElementById(SilverlightObject); if (theHost==null) {alert('找不到 theHost ['+SilverlightObject+']');return;} var Element = theHost.content.findName(ElementName); if (Element==null) {alert('找不到 ElementName ['+ElementName+']');return;} Element.setValue(Propery,Value); } ================             ==程式6 ============== ================          ==程式7 ============== Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) '取得Xaml1控制項的ID Dim SilverlightObject As String = Me.Xaml1.ClientID '要修改的物件 Dim ElementName As String = "Ellipse_RotateTransformAngle" '要修改的屬性名稱 Dim PropertyName As String = "Angle" '屬性值 Dim value As Single '抓取TextBox屬性值 Single.TryParse(Me.TextBox1.Text, value) '呼叫DoAsnycJavaScript以同步方式執行JavaScript DoAsnycJavaScript("SetValue('" & SilverlightObject & "','" & ElementName & "','" & PropertyName & "','" & value & "');") End Sub ================       ==程式8 ============== (…略…) ================       ==程式9 ============== (…略…) (…略…) (…略…) ================               ==程式10 ==============    //動態播放動畫 function PlayAnimation(SilverlightObject, StoryboardName, TargetName) { var theHost = document.getElementById(SilverlightObject); if (theHost==null) {alert('找不到 theHost ['+SilverlightObject+']');return;} var Storyboard = theHost.content.findName(StoryboardName); if (Storyboard==null) {alert('找不到 Storyboard ['+StoryboardName+']');return;} //設定動畫播放對象 if (TargetName!='') Storyboard.setValue("Storyboard.TargetName",TargetName); //播放動畫 Storyboard.Begin(); } //重設(停止)動畫 function ResetAnimation(SilverlightObject, StoryboardName) { var theHost = document.getElementById(SilverlightObject); if (theHost==null) {alert('找不到 theHost ['+SilverlightObject+']');return;} var Storyboard = theHost.content.findName(StoryboardName); if (Storyboard==null) {alert('找不到 Storyboard ['+StoryboardName+']');return;} //停止動畫 Storyboard.Stop(); } ================       ==程式11 ==============    '按下Button後撥放動畫 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) '取得Xaml1控制項的ID Dim SilverlightObject As String = Me.Xaml1.ClientID '要修改的屬性名稱 Dim StoryBoardName As String = "Timeline1" '呼叫DoAsnycJavaScript以同步方式執行JavaScript DoAsnycJavaScript("PlayAnimation('" & SilverlightObject & "','" & StoryBoardName & "','');") End Sub '按下Button後停止動畫撥放 Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) '取得Xaml1控制項的ID Dim SilverlightObject As String = Me.Xaml1.ClientID '要修改的屬性名稱 Dim StoryBoardName As String = "Timeline1" '呼叫DoAsnycJavaScript以同步方式執行JavaScript DoAsnycJavaScript("ResetAnimation('" & SilverlightObject & "','" & StoryBoardName & "');") End Sub ================