今天就跟大家聊聊有關(guān)Silverlight中導(dǎo)航框架與動態(tài)加載的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
為船營等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及船營網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、船營網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
1. Silverlight 3 的導(dǎo)航框架簡介
Silverlight 提供了內(nèi)置的導(dǎo)航框架,可以比較輕松的在 Silverlight Page 之間進行切換,并且可以和瀏覽器的前進、后退按鈕集成,下面的代碼可以簡單的說明其用法:
這段代碼很簡單,通過設(shè)置 HyperLinkButton 的 NavigationUri 和 TargetName 兩個屬性,可以讓指定的 Frame 去加載指定的 Silverlight Page 。
2. 常見的動態(tài)加載解決方案
當(dāng) Silverlight 項目比較大的時候, 很自然的會想到將 Silverlight 項目拆分成多個 xap 文件,進行按需加載,這個實現(xiàn)起來也不難。通常的做法是使用 WebClient 或者 HttpWebRequest ,向服務(wù)端請求所需的 xap 文件,然后通過 xap 壓縮包內(nèi)的 AppManifest.xaml 文件,獲取到 xap 文件內(nèi)部打包的 dll 文件信息,在客戶端通過反射進行加載。
3. 導(dǎo)航框架與動態(tài)加載相結(jié)合時遇到的問題,原因與解決方法
如果將這兩者結(jié)合起來,利用 Sliverlight 內(nèi)置的導(dǎo)航框架來加載動態(tài)加載的 xap 文件內(nèi)部的 Silverlight Page ,對應(yīng)用程序的開發(fā)和用戶體驗都是有很大幫助的:對開發(fā)方面來說,不用反射加載,而是使用 Silverlight 內(nèi)置的導(dǎo)航框架,可以節(jié)省很多代碼;對用戶體驗方面,按需加載能減少初始加載文件的大小,減少等待時間,使用導(dǎo)航框架可以和瀏覽器的前進、后退按鈕緊密集成,用戶體驗更佳。
但是,在 Silverlight 3 目前的版本中, Frame 控件似乎不能直接加載動態(tài)加載的 Silverlight Page , 不管是通過設(shè)置 HyperLinkButton 的 NavigateUri 屬性,還是通過調(diào)用 Frame.Navigate(Uri source) 方法,都會出現(xiàn)相同的異常, 看下面代碼:
var xap = "http://localhost:2704/AppSL.Web/ClientBin/TestSLApp.xap"; // LoadPackage 是加載 xap 的擴展方法 Deployment.Current.LoadPackage(xap, () => { var uri = new Uri("/TestSLApp;component/MainPage.xaml", UriKind.Relative); this.WidgetFrame.Navigate(uri); });
當(dāng)執(zhí)行至 WidgetFrame.Navigate(uri) 時,會出現(xiàn)下面的異常:
是什么原因?qū)е逻@個異常呢? 通過 Reflector 察看 PageResourceContentLoader ,發(fā)現(xiàn)加載 x:Class 的是這個 GetTypeFromAnyLoadedAssembly 方法:
這個方法只是遍歷 Deployment.Current.Part 去尋找所需要的類型,并沒有去遍歷動態(tài)加載的文件, 當(dāng)然,這里也不可能去遍歷。
看到這里,終于找到異常出現(xiàn)的原因了,由于這個方法是私有并且是靜態(tài)的,無法進行重寫,只能通過其它途徑來解決。我想到的解決方法是,新建一個 Silverlight Page, 然后刪除對應(yīng)的代碼文件,刪除 xaml 視圖的 x:Code 信息,如下圖所示:
***的解決方案就是, 要做一個引導(dǎo)的文件,這個文件必須是一個獨立的 xaml 文件,沒有代碼文件,沒有 x:Class 信息,這樣就不會被編譯成新的類型,自然可以被 Silverlight 的導(dǎo)航框架加載了。
看完上述內(nèi)容,你們對Silverlight中導(dǎo)航框架與動態(tài)加載的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
當(dāng)前標題:Silverlight中導(dǎo)航框架與動態(tài)加載的原理是什么
文章分享:http://jinyejixie.com/article8/ppioop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、動態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、標簽優(yōu)化、響應(yīng)式網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)