日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解Silverlight導(dǎo)航框架與動(dòng)態(tài)加載原理

對(duì)于Silverlight導(dǎo)航框架,大家了解還不是很多,希望本文能讓大家對(duì)Silverlight導(dǎo)航框架有跟深入的了解。特別是本文中很多部分在Visual Studio中完成。

站在用戶的角度思考問題,與客戶深入溝通,找到綏德網(wǎng)站設(shè)計(jì)與綏德網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋綏德地區(qū)。

1. Silverlight 3 的導(dǎo)航框架簡(jiǎn)介

Silverlight 提供了內(nèi)置的導(dǎo)航框架,可以比較輕松的在 Silverlight Page 之間進(jìn)行切換,并且可以和瀏覽器的前進(jìn)、后退按鈕集成,下面的代碼可以簡(jiǎn)單的說明其用法:

這段代碼很簡(jiǎn)單,通過設(shè)置 HyperLinkButton 的 NavigationUri 和 TargetName 兩個(gè)屬性,可以讓指定的 Frame 去加載指定的 Silverlight Page 。

2. 常見的動(dòng)態(tài)加載解決方案

當(dāng) Silverlight 項(xiàng)目比較大的時(shí)候, 很自然的會(huì)想到將 Silverlight 項(xiàng)目拆分成多個(gè) xap 文件,進(jìn)行按需加載,這個(gè)實(shí)現(xiàn)起來也不難。通常的做法是使用 WebClient 或者 HttpWebRequest ,向服務(wù)端請(qǐng)求所需的 xap 文件,然后通過 xap 壓縮包內(nèi)的 AppManifest.xaml 文件,獲取到 xap 文件內(nèi)部打包的 dll 文件信息,在客戶端通過反射進(jìn)行加載。

3. 導(dǎo)航框架與動(dòng)態(tài)加載相結(jié)合時(shí)遇到的問題,原因與解決方法

如果將這兩者結(jié)合起來,利用 Sliverlight 內(nèi)置的導(dǎo)航框架來加載動(dòng)態(tài)加載的 xap 文件內(nèi)部的 Silverlight Page ,對(duì)應(yīng)用程序的開發(fā)和用戶體驗(yàn)都是有很大幫助的:對(duì)開發(fā)方面來說,不用反射加載,而是使用 Silverlight 內(nèi)置的導(dǎo)航框架,可以節(jié)省很多代碼;對(duì)用戶體驗(yàn)方面,按需加載能減少初始加載文件的大小,減少等待時(shí)間,使用導(dǎo)航框架可以和瀏覽器的前進(jìn)、后退按鈕緊密集成,用戶體驗(yàn)更佳。

但是,在 Silverlight 3 目前的版本中, Frame 控件似乎不能直接加載動(dòng)態(tài)加載的 Silverlight Page , 不管是通過設(shè)置 HyperLinkButton 的 NavigateUri 屬性,還是通過調(diào)用 Frame.Navigate(Uri source) 方法,都會(huì)出現(xiàn)相同的異常, 看下面代碼:

  
  
  
  
  1. var xap = "http://localhost:2704/AppSL.Web/ClientBin/TestSLApp.xap";
  2. // LoadPackage 是加載 xap 的擴(kuò)展方法
  3. Deployment.Current.LoadPackage(xap, () => {
  4.    var uri = new Uri("/TestSLApp;component/MainPage.xaml", UriKind.Relative);
  5.    this.WidgetFrame.Navigate(uri);
  6. });

當(dāng)執(zhí)行至 WidgetFrame.Navigate(uri) 時(shí),會(huì)出現(xiàn)下面的異常:

是什么原因?qū)е逻@個(gè)異常呢? 通過 Reflector 察看 PageResourceContentLoader ,發(fā)現(xiàn)加載 x:Class 的是這個(gè) GetTypeFromAnyLoadedAssembly 方法:

 

這個(gè)方法只是遍歷 Deployment.Current.Part 去尋找所需要的類型,并沒有去遍歷動(dòng)態(tài)加載的文件, 當(dāng)然,這里也不可能去遍歷。

看到這里,終于找到異常出現(xiàn)的原因了,由于這個(gè)方法是私有并且是靜態(tài)的,無法進(jìn)行重寫,只能通過其它途徑來解決。我想到的解決方法是,新建一個(gè) Silverlight Page, 然后刪除對(duì)應(yīng)的代碼文件,刪除 xaml 視圖的 x:Code 信息,如下圖所示:

***的解決方案就是, 要做一個(gè)引導(dǎo)的文件,這個(gè)文件必須是一個(gè)獨(dú)立的 xaml 文件,沒有代碼文件,沒有 x:Class 信息,這樣就不會(huì)被編譯成新的類型,自然可以被 Silverlight 的導(dǎo)航框架加載了。

***說一句,不知道 Silverlight 以后的版本會(huì)不會(huì)考慮動(dòng)態(tài)加載的問題呢? 據(jù)我所知, Flex 已經(jīng)內(nèi)置了模塊動(dòng)態(tài)加載的機(jī)制了。

鏈接:http://www.cnblogs.com/beginor/archive/2009/10/24/1589125.html


本文標(biāo)題:詳解Silverlight導(dǎo)航框架與動(dòng)態(tài)加載原理
文章來源:http://www.dlmjj.cn/article/dhiiocc.html