Silverlight與HTML雙向互動

iDotNetSpace發表於2010-12-09

Silverlight具備很好的使用者體驗,但有時需要在頁面的佈局上進行特殊處理,比如作為webpart整合到Sharepoint中等等。

HTML和Silverlight之間的雙向互動可以更靈活的使用Silverlight進行開發,上午摸索了一下,記錄在此。

一,向Silverlight傳遞資料,實現個性化載入

Silverlight在HTML中的引用是:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/VideoCenter.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style.:none"/>
a>
object>
這種引用外掛的方式提供了一系列的引數來實現個性載入,上面的程式碼中我們加了一行引數
<param name="initParams" value="CategoryId=1" /> 
我們可以在Silverlight中處理這些引數,開啟Silverlight應用程式的App程式碼檔案,加上接收引數的程式碼
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.InitParams.Count != 0)
{
foreach(var item in e.InitParams)
{
this.Resources.Add(item.Key, item.Value);
}
}
this.RootVisual = new MainPage();
}
我們看到對e.InitParams的處理,即可得到了HTML中傳進來的引數,實現個性化載入:
if(App.Current.Resources["CategoryId"]!=null)
{
int cateId = int.Parse(App.Current.Resources["CategoryId"].ToString());
CategoryItem c = new CategoryItem();
c.CategoryID = cateId;
this.gridOfList.Children.Add(c);
}

二,Silverlight呼叫HTML中的指令碼資源,實現自身的樣式等修改

首先我們可以在載入Silverlight元件的頁面上編寫一段Javascript指令碼
function InvokePlayer(videoId) {
document.getElementById("divCategory").style.display = "none";
var player = document.getElementById("divPlayer");
player.style.width = "100%";
player.style.height = "600px";
}
怎麼在Silverlight中呼叫這個指令碼呢?我們可以在某個事件中呼叫Silverlight提供的類方法
System.Windows.Browser.HtmlPage.Window.Invoke("InvokePlayer", videoId);
當然類似的方法還有幾個:
(HtmlPage.Window.GetProperty("InvokePlayer") as ScriptObject)InvokeSelf("Good Function!");
HtmlPage.Window.Eval("document.getElementById('result')") as HtmlElement…
即可實現呼叫指令碼。
經過以上的兩個方法即可實現HTML和Silverlight之間雙向傳遞資料的功能。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-681359/,如需轉載,請註明出處,否則將追究法律責任。

相關文章