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

在Silverlight 2應用程序中切換用戶控件

摘要

大家都知道,在Silverlight 2應用程序中,每個應用程序將生成一個xap文件,每一個xap文件中只能設置一個起始的用戶控件。如果我們有多個用戶控件,需要在不同的ASP.NET頁面中加載,最簡單的方法莫過于針對多個用戶控件分別建立對應的Silverlight項目,但這種方式有很多的缺點,如我們的樣式文件需要在多個項目中進行拷貝。

本文將介紹利用初始化參數進行用戶控件的切換這一技巧。

準備

現在建立一個項目結構如下圖所示,在Silverlight項目中我們有個三個用戶控件:ContentPage、DefaultPage、MasterPage,需要在不同的ASP.NET頁面加載時顯示不同的用戶控件。

TerryLee_0099

思路

要實現這個功能并不是什么難事,我們完全可以使用InitParams這個屬性,如下圖所示:

TerryLee_0100

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

TerryLee_0101

該屬性是一個Dictionary<string,string>類型的,我們可以在其中設置一系列的鍵-值對初始化參數,用逗號“,”分割開。所以我們的思路非常簡單,就是在ASP.NET頁面或者HTML中通過InitParameters指定起始用戶控件,然后在Application_Startup事件中獲取參數,并設置RootVisual。

實現

如下面這段代碼,我們設置一個初始化參數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根據參數不同設置不同的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;    }}

現在運行程序后,可以看到起始用戶控件為ContentPage,如下圖所示:

TerryLee_0102 

改進

上面這種方式雖然達到了我們的目的,但是switch語句代碼實在不怎么優雅,如果有幾十個用戶控件,那就得有幾十個分支。既然我們在初始話參數中設置了起始用戶控件名,為什么不直接使用反射呢?在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;}

現在代碼看起來好多了,即便有再多的用戶控件也不用再修改此處的代碼。但是大家一定要注意一個問題,就是要合理的劃分Silverlight項目,不要把所有的用戶控件都放在一個項目里面,避免xap文件過大。在后面我還會寫一篇文章來談談如何合理的劃分Silverlight項目結構,以及如何調用其它xap文件中的用戶控件。

總結

本文其實非常的簡單,寫這篇文章緣于最近很多朋友都問到這一問題,所以在這里做一下說明,主要是利用了InitParameters屬性并結合反射來實現用戶控件的切換。希望對大家有所幫助。

 

NET技術在Silverlight 2應用程序中切換用戶控件,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 秋霞伦理电影在2017韩国在线伦 | 伊人电院网 | 国产探花在线精品一区二区 | 99视频在线精品免费观看18 | 免费看国产曰批40分钟 | 色欲色香天天天综合 | 欧美丰满熟妇无码XOXOXO | 一本到高清视频在线观看三区 | WWW国产亚洲精品久久久日本 | 少妇大荫蒂毛多毛大 | 国产精品久久久久久久A片冻果 | 亚洲国产精品嫩草影院永久 | 中文字幕中文字幕永久免费 | 欧美性狂猛AAAAAA | 久久国产乱子伦精品免费不卡 | 成人a毛片久久免费播放 | 国产偷抇久久精品A片蜜臀AV | 欧美GV肉片视频免费观看 | 日本高清免费一本视频在线观看 | 中文天堂www资源 | 久久人人爽人人片AV人成 | 九九99亚洲精品久久久久 | 玩50岁四川熟女大白屁股直播 | 亚洲中文 字幕 国产 综合 | 国产综合在线视频 | 优菈的乳液狂飙天堂W98 | 日本熟妇乱妇熟色A片蜜桃亚洲 | 成人免费视频在线 | 午夜办公室在线观看高清电影 | 亚洲人成伊人成综合网久久久 | 亚洲精品国产高清不卡在线 | 国产人妻麻豆蜜桃色 | 久久国产露脸老熟女熟69 | 黑人娇小BBW | 国产三级精品三级在线观看 | a视频免费在线 | 日本夜爽爽一区二区三区 | 成人小视频在线观看 | 扒开女生尿口 | 2022国产麻豆剧传媒剧情 | 国产产乱码一二三区别免费 |