大家都知道,在Silverlight 2應用程式中,每個應用程式将生成一個xap檔案,每一個xap檔案中隻能設定一個起始的使用者控件。如果我們有多個使用者控件,需要在不同的ASP.NET頁面中加載,最簡單的方法莫過于針對多個使用者控件分别建立對應的Silverlight項目,但這種方式有很多的缺點,如我們的樣式檔案需要在多個項目中進行拷貝。
本文将介紹利用初始化參數進行使用者控件的切換這一技巧。
現在建立一個項目結構如下圖所示,在Silverlight項目中我們有個三個使用者控件:ContentPage、DefaultPage、MasterPage,需要在不同的ASP.NET頁面加載時顯示不同的使用者控件。
要實作這個功能并不是什麼難事,我們完全可以使用InitParams這個屬性,如下圖所示:
或者在HTML中通過param指定InitParameters:
該屬性是一個Dictionary<string,string>類型的,我們可以在其中設定一系列的鍵-值對初始化參數,用逗号“,”分割開。是以我們的思路非常簡單,就是在ASP.NET頁面或者HTML中通過InitParameters指定起始使用者控件,然後在Application_Startup事件中擷取參數,并設定RootVisual。
如下面這段代碼,我們設定一個初始化參數InitPage為ContentPage:
<a href="http://11011.net/software/vspaste"></a>
然後在Application_Startup根據參數不同設定不同的RootVisual:
現在運作程式後,可以看到起始使用者控件為ContentPage,如下圖所示:
上面這種方式雖然達到了我們的目的,但是switch語句代碼實在不怎麼優雅,如果有幾十個使用者控件,那就得有幾十個分支。既然我們在初始話參數中設定了起始使用者控件名,為什麼不直接使用反射呢?在Silverlight 2中,對于發射提供了很好的支援,是以我們的代碼可以修改如下:
本文其實非常的簡單,寫這篇文章緣于最近很多朋友都問到這一問題,是以在這裡做一下說明,主要是利用了InitParameters屬性并結合反射來實作使用者控件的切換。希望對大家有所幫助。
示例代碼下載下傳:
本文轉自lihuijun51CTO部落格,原文連結:http://blog.51cto.com/terrylee/85341 ,如需轉載請自行聯系原作者