技巧:在Silverlight 2应用程序中切换用户控件
生活随笔
收集整理的這篇文章主要介紹了
技巧:在Silverlight 2应用程序中切换用户控件
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
| 版權(quán)聲明:原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、作者信息和本聲明。否則將追究法律責(zé)任。http://terrylee.blog.51cto.com/342737/85341 |
摘要大家都知道,在Silverlight 2應(yīng)用程序中,每個(gè)應(yīng)用程序?qū)⑸梢粋€(gè)xap文件,每一個(gè)xap文件中只能設(shè)置一個(gè)起始的用戶控件。如果我們有多個(gè)用戶控件,需要在不同的ASP.NET頁(yè)面中加載,最簡(jiǎn)單的方法莫過于針對(duì)多個(gè)用戶控件分別建立對(duì)應(yīng)的Silverlight項(xiàng)目,但這種方式有很多的缺點(diǎn),如我們的樣式文件需要在多個(gè)項(xiàng)目中進(jìn)行拷貝。 本文將介紹利用初始化參數(shù)進(jìn)行用戶控件的切換這一技巧。準(zhǔn)備現(xiàn)在建立一個(gè)項(xiàng)目結(jié)構(gòu)如下圖所示,在Silverlight項(xiàng)目中我們有個(gè)三個(gè)用戶控件:ContentPage、DefaultPage、MasterPage,需要在不同的ASP.NET頁(yè)面加載時(shí)顯示不同的用戶控件。思路要實(shí)現(xiàn)這個(gè)功能并不是什么難事,我們完全可以使用InitParams這個(gè)屬性,如下圖所示: 或者在HTML中通過param指定InitParameters: 該屬性是一個(gè)Dictionary<string,string>類型的,我們可以在其中設(shè)置一系列的鍵-值對(duì)初始化參數(shù),用逗號(hào)“,”分割開。所以我們的思路非常簡(jiǎn)單,就是在ASP.NET頁(yè)面或者HTML中通過InitParameters指定起始用戶控件,然后在Application_Startup事件中獲取參數(shù),并設(shè)置RootVisual。實(shí)現(xiàn)如下面這段代碼,我們?cè)O(shè)置一個(gè)初始化參數(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)在運(yùn)行程序后,可以看到起始用戶控件為ContentPage,如下圖所示:改進(jìn)上面這種方式雖然達(dá)到了我們的目的,但是switch語(yǔ)句代碼實(shí)在不怎么優(yōu)雅,如果有幾十個(gè)用戶控件,那就得有幾十個(gè)分支。既然我們?cè)诔跏荚拝?shù)中設(shè)置了起始用戶控件名,為什么不直接使用反射呢?在Silverlight 2中,對(duì)于發(fā)射提供了很好的支持,所以我們的代碼可以修改如下: 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)在代碼看起來好多了,即便有再多的用戶控件也不用再修改此處的代碼。但是大家一定要注意一個(gè)問題,就是要合理的劃分Silverlight項(xiàng)目,不要把所有的用戶控件都放在一個(gè)項(xiàng)目里面,避免xap文件過大。在后面我還會(huì)寫一篇文章來談?wù)勅绾魏侠淼膭澐諷ilverlight項(xiàng)目結(jié)構(gòu),以及如何調(diào)用其它xap文件中的用戶控件。總結(jié)本文其實(shí)非常的簡(jiǎn)單,寫這篇文章緣于最近很多朋友都問到這一問題,所以在這里做一下說明,主要是利用了InitParameters屬性并結(jié)合反射來實(shí)現(xiàn)用戶控件的切換。希望對(duì)大家有所幫助。 示例代碼下載:本文出自 “TerryLee技術(shù)專欄” 博客,請(qǐng)務(wù)必保留此出處http://terrylee.blog.51cto.com/342737/85341 本文出自 51CTO.COM技術(shù)博客 |
轉(zhuǎn)載于:https://www.cnblogs.com/hdjjun/archive/2008/12/24/1361581.html
總結(jié)
以上是生活随笔為你收集整理的技巧:在Silverlight 2应用程序中切换用户控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Subversion的权限控制
- 下一篇: 如何将一个文件分割成多个小文件