天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

在Silverlight 2應(yīng)用程序中切換用戶控件

摘要

大家都知道,在Silverlight 2應(yīng)用程序中,每個(gè)應(yīng)用程序?qū)⑸梢粋€(gè)xap文件,每一個(gè)xap文件中只能設(shè)置一個(gè)起始的用戶控件。如果我們有多個(gè)用戶控件,需要在不同的ASP.NET頁面中加載,最簡單的方法莫過于針對(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頁面加載時(shí)顯示不同的用戶控件。

TerryLee_0099

思路

要實(shí)現(xiàn)這個(gè)功能并不是什么難事,我們完全可以使用InitParams這個(gè)屬性,如下圖所示:

TerryLee_0100

或者在HTML中通過param指定InitParameters:

TerryLee_0101

該屬性是一個(gè)Dictionary<string,string>類型的,我們可以在其中設(shè)置一系列的鍵-值對(duì)初始化參數(shù),用逗號(hào)“,”分割開。所以我們的思路非常簡單,就是在ASP.NET頁面或者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,如下圖所示:

TerryLee_0102 

改進(jìn)

上面這種方式雖然達(dá)到了我們的目的,但是switch語句代碼實(shí)在不怎么優(yōu)雅,如果有幾十個(gè)用戶控件,那就得有幾十個(gè)分支。既然我們?cè)诔跏荚拝?shù)中設(shè)置了起始用戶控件名,為什么不直接使用反射呢?在Silverlight 2中,對(duì)于反射提供了很好的支持,所以我們的代碼可以修改如下:

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í)非常的簡單,寫這篇文章緣于最近很多朋友都問到這一問題,所以在這里做一下說明,主要是利用了InitParameters屬性并結(jié)合反射來實(shí)現(xiàn)用戶控件的切換。希望對(duì)大家有所幫助。

 

NET技術(shù)在Silverlight 2應(yīng)用程序中切換用戶控件,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久综合香蕉久久久久久久 | 91免费网站在线看入口黄 | www.亚洲天堂 | 含羞草在线 | 午夜影院一区二区三区 | 欧美区一区二 | 日本内射精品一区二区视频 | 99视频网址| 国产欧美二区综合 | 亚洲精品日韩在线观看视频 | 免费看国产精品麻豆 | 少妇无码太爽了视频在线播放 | 四虎影视国产精品亚洲精品hd | proburn中文破解版下载 | 国语自产拍在线视频普通话 | 忘忧草日本在线社区WWW电影 | 亚洲色图激情文学 | 久久99re66热这里只有精品 | 亚欧乱亚欧乱色视频 | 亚洲精品一卡二卡三卡四卡2021 | 久久精品天天中文字幕 | 啊灬啊别停灬用力啊在线观看视频 | 俄罗斯freeⅹ性欧美 | 一区二区三区国产亚洲网站 | 超碰97超碰在线视频哦 | 日韩特黄特色大片免费视频 | 欧美一区二区三区激情视频 | 狼好色有你好看 | 失禁h啪肉尿出来高h | 国产免费午夜高清 | 91久久精品一区二区三区 | 免费看b站 | 亚洲国产无线码在线观看 | 国产精品永久在线 | 亚洲AV综合色一区二区三区 | 久久久96| 男女性杂交内射妇女BBWXZ | 午夜国产精品影院在线观看 | 亚洲精品中文字幕一二三四区 | 亚洲精品天堂在线 | 哒哒哒高清视频在线观看 |