|
摘要
大家都知道,在Silverlight 2應(yīng)用程序中,每個應(yīng)用程序?qū)⑸梢粋€xap文件,每一個xap文件中只能設(shè)置一個起始的用戶控件。如果我們有多個用戶控件,需要在不同的ASP.NET頁面中加載,最簡單的方法莫過于針對多個用戶控件分別建立對應(yīng)的Silverlight項目,但這種方式有很多的缺點,如我們的樣式文件需要在多個項目中進行拷貝。
本文將介紹利用初始化參數(shù)進行用戶控件的切換這一技巧。
準備
現(xiàn)在建立一個項目結(jié)構(gòu)如下圖所示,在Silverlight項目中我們有個三個用戶控件:ContentPage、DefaultPage、MasterPage,需要在不同的ASP.NET頁面加載時顯示不同的用戶控件。
思路
要實現(xiàn)這個功能并不是什么難事,我們完全可以使用InitParams這個屬性,如下圖所示:
或者在HTML中通過param指定InitParameters:
該屬性是一個Dictionary<string,string>類型的,我們可以在其中設(shè)置一系列的鍵-值對初始化參數(shù),用逗號“,”分割開。所以我們的思路非常簡單,就是在ASP.NET頁面或者HTML中通過InitParameters指定起始用戶控件,然后在Application_Startup事件中獲取參數(shù),并設(shè)置RootVisual。
實現(xiàn)
如下面這段代碼,我們設(shè)置一個初始化參數(shù)InitPage為ContentPage:
<ASP:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/SwitchUserControl.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" InitParameters="InitPage=ContentPage"/>
然后在Application_Startup根據(jù)參數(shù)不同設(shè)置不同的RootVisual:
private void Application_Startup(object sender, StartupEventArgs e){ if (!e.InitParams.ContainsKey("InitPage")) { this.RootVisual = new DefaultPage(); return; } switch (e.InitParams["InitPage"]) { case "MasterPage": this.RootVisual = new MasterPage(); break; case "ContentPage": this.RootVisual = new ContentPage(); break; default: this.RootVisual = new DefaultPage(); break; }}
現(xiàn)在運行程序后,可以看到起始用戶控件為ContentPage,如下圖所示:
改進
上面這種方式雖然達到了我們的目的,但是switch語句代碼實在不怎么優(yōu)雅,如果有幾十個用戶控件,那就得有幾十個分支。既然我們在初始話參數(shù)中設(shè)置了起始用戶控件名,為什么不直接使用反射呢?在Silverlight 2中,對于反射提供了很好的支持,所以我們的代碼可以修改如下:
private void Application_Startup(object sender, StartupEventArgs e){ if (!e.InitParams.ContainsKey("InitPage")) { this.RootVisual = new DefaultPage(); return; } Assembly assembly = Assembly.GetExecutingAssembly(); String rootName = String.Format("SwitchUserControl.{0}", e.InitParams["InitPage"]); UIElement rootVisual = assembly.CreateInstance(rootName) as UIElement; this.RootVisual = rootVisual;}
現(xiàn)在代碼看起來好多了,即便有再多的用戶控件也不用再修改此處的代碼。但是大家一定要注意一個問題,就是要合理的劃分Silverlight項目,不要把所有的用戶控件都放在一個項目里面,避免xap文件過大。在后面我還會寫一篇文章來談?wù)勅绾魏侠淼膭澐諷ilverlight項目結(jié)構(gòu),以及如何調(diào)用其它xap文件中的用戶控件。
總結(jié)
本文其實非常的簡單,寫這篇文章緣于最近很多朋友都問到這一問題,所以在這里做一下說明,主要是利用了InitParameters屬性并結(jié)合反射來實現(xiàn)用戶控件的切換。希望對大家有所幫助。
NET技術(shù):在Silverlight 2應(yīng)用程序中切換用戶控件,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。