Silverlight 4 初學(xué)者的10大經(jīng)典問答 |
發(fā)布時(shí)間: 2012/9/23 16:10:45 |
我正在自學(xué)Silverlight / WPF,我打算用它們來實(shí)現(xiàn)我在StannardLabs的下一個(gè)大項(xiàng)目的一部分:一系列支持WinMo7 / Android / iOS phones的休閑小游戲。學(xué)習(xí)每個(gè)平臺(tái)是如何工作的,有什么區(qū)別,和在每個(gè)平臺(tái)上的應(yīng)用程序商店的有什么區(qū)別成了家常便飯。 在學(xué)習(xí)Silverlight 4的過程中,Silverlight的最新版本幾乎沒有指南或圖書,我建立了一個(gè)列表,這個(gè)列表包括十個(gè)最經(jīng)典的問題的解答,當(dāng)我剛開始學(xué)習(xí)Silverlight的時(shí)候,我總是希望能更容易地找到這些問題的答案。也許是因?yàn)槲沂褂昧隋e(cuò)誤的詞匯來搜索,或者,也許有一些事情專業(yè)的Silverlight / WPF開發(fā)人員認(rèn)為很明顯,并不需要包括在他們的圖書和博客條目里。所以我不能很快地找出這些問題的答案。為了方便大家,我首先對(duì)這些問題進(jìn)行研究。 這是我的列表: 1,在一個(gè)應(yīng)用程序中,我怎樣導(dǎo)航到不同的Silverlight內(nèi)容? 答:這時(shí)候,請(qǐng)考慮一下,Silverlight是一種基于Web的技術(shù),所以你真正問的問題是“在一個(gè)Silverlight應(yīng)用程序中,我怎樣建立獨(dú)立的頁(yè)面?”很幸運(yùn),這意味著你可以參考:Silverlight的使用:Navigation框架和Silverlight頁(yè)面(http://msdn.microsoft.com/en-us/library/cc838245%28VS.95%29.aspx)。 我找到的最容易的解決方案是使用這些工具建立一個(gè)母版頁(yè)(Main.xaml或類似的其他文件),在它的中間,要放置一個(gè)Silverlight的Frame元素,然后在這個(gè)frame里,你要替換你的可交換的頁(yè)面。在Silverlight中Frame和Navigation如何工作(http://www.flickr.com/photos/50581866@N06/4863500755/) 2,在一個(gè)Silverlight應(yīng)用程序中,我怎樣建立一個(gè)超鏈接,來鏈接到一個(gè)Web頁(yè)面? 答:也是使用Silverlight的Navigation框架,在我的答案里,我主要回答這個(gè)個(gè)問題:“我怎樣在Silverlight中建立超鏈接,來鏈接到外部的內(nèi)容(http://msdn.microsoft.com/en-us/library/cc838245%28VS.95%29.aspx#external_navigation),并在一個(gè)Web瀏覽器中打開它。”這是MSDN中的代碼樣例,它說明了你要怎么做: 3,在一個(gè)Silverlight應(yīng)用程序中,我怎樣打開一個(gè)模式對(duì)話框窗口? 答:首先,你要知道Silverlight并不是Windows Forms或WPF,它們都為那些過去使用Win32 API的程序員實(shí)現(xiàn)了模式對(duì)話框的行為。Silverlight是一個(gè)跨平臺(tái)的技術(shù),Silverlight應(yīng)用程序要在多個(gè)環(huán)境下運(yùn)行,所以你過去使用的一些Win32 API下的行為,它的.NET后裔(Silverlight)將無法使用。所以你過去在WPF下使用的模式對(duì)話框工具,在Silverlight下無法使用。話雖這樣說,在Silverlight中,要實(shí)現(xiàn)一個(gè)和模式對(duì)話框類似的用戶界面元素是很容易的。這是兩個(gè)參考資源,說明了如何實(shí)現(xiàn)這樣的功能: Silverlight中的模式窗口(http://www.codeproject.com/KB/silverlight/slmodal.aspx) 4,在一個(gè)TextBlock元素中,我怎樣把一小段內(nèi)嵌文本設(shè)置成不同的字體樣式? 答:從本質(zhì)上來說,你問的是HTML中的標(biāo)簽在XAML / WPF中的等價(jià)物,以便于你可以在一個(gè)TextBlock元素里選擇性的應(yīng)用各種樣式。幸運(yùn)的是,這個(gè)等價(jià)物的確存在——它被稱為Run元素,你可以在TextBlock元素的文本內(nèi)容里的任何地方使用它。這是一些在Silverlight中使用Run元素的例子(http://stackoverflow.com/questions/2435880/is-it-possible-to-seletively-color-a-wrapping-textblock-in-silverlight-wpf),這是其中一個(gè)例子:
5,對(duì)于Silverlight來說,實(shí)現(xiàn)session-specific存儲(chǔ)的最好方法是什么? 答:因?yàn)槲覀兪褂肏TTP——一個(gè)無狀態(tài)的協(xié)議,所以這個(gè)問題并不像看上去那么棘手——如果你和我一樣是一個(gè)ASP.NET的開發(fā)人員,那么你應(yīng)該比那些編寫桌面應(yīng)用程序的程序員更了解session的概念和不同的狀態(tài) 這是個(gè)好消息:Silverlight能像桌面應(yīng)用程序那樣處理狀態(tài)!在一些“輕量級(jí)”的場(chǎng)景下,你可以在你的application類的幾個(gè)公共屬性上存儲(chǔ)你的session。在一些“中量級(jí)”的場(chǎng)景下,你可以創(chuàng)建一個(gè)靜態(tài)的session類。在一些“重量級(jí)”的場(chǎng)景下,你可以使用獨(dú)立存儲(chǔ)的方式。如果你想了解更多的信息,可以查看Silverlight的官方論壇中的這個(gè)帖子(http://forums.silverlight.net/forums/p/65328/161221.aspx)。 6,在Silverlight應(yīng)用程序中,有什么令人信服的理由一定要使用RIA-service來代替普通的WCF service嗎? 答:如果你過去讀過《Microsoft .NET: Architecting Applications for the Enterprise》(即使你不是一個(gè)企業(yè)級(jí)應(yīng)用程序的開發(fā)人員(我也不是),你也應(yīng)該讀一下關(guān)于設(shè)計(jì)工具和各種模式的內(nèi)容),那么你應(yīng)該知道每個(gè)設(shè)計(jì)問題(比如這個(gè)問題)的答案總是“要根據(jù)具體情況而定”的。Shawn Wildermuth的這篇文章比我編排的要好得多:主導(dǎo)你選擇一個(gè)數(shù)據(jù)服務(wù)的實(shí)現(xiàn)(而不是另一個(gè))的一些因素(http://wildermuth.com/2009/09/29/Choosing_a_Data_Access_Layer_for_Silverlight_3),但是為了回答這個(gè)問題,我會(huì)把它們總結(jié)一下: 如果你的目標(biāo)是增強(qiáng)一個(gè)Silverlight應(yīng)用程序,讓它運(yùn)行的更快,那么你應(yīng)該使用RIA services,因?yàn)楹推渌娲慕鉀Q方案相比,你不需要寫很多的代碼,也不需要擔(dān)心WCF跨域的策略文件,變更跟蹤,等等。 7,反之,在Silverlight應(yīng)用程序中,你為什么選擇WCF service而不是RIA-service呢? 答:我決定選擇普通的WCF service而不是RIA-service,因?yàn)椋P(guān)于這個(gè)問題我已經(jīng)讀過這篇文章了(http://stackoverflow.com/questions/879725/what-is-net-ria-services),在你需要支持Silverlight以外的客戶端(對(duì)我而言,就是iOS和Android客戶端)的情況下,WCF是一個(gè)更好的選擇。另外,如果你已經(jīng)有一個(gè)現(xiàn)成的WCF service,你應(yīng)該使用這個(gè)服務(wù),而不是用RIA service來重寫所有的東西。 8,RIA-services能輕松地在非Silverlight應(yīng)用程序中重用嗎? 答:答案很明顯是“不能”,但是我一直是一個(gè)Silverlight的新手,所以可能我是錯(cuò)的。如果你需要支持其他的客戶端,尤其是非.NET framework上的一些客戶端,我建議你使用WCF服務(wù)。 9,我怎樣在運(yùn)行時(shí)動(dòng)態(tài)地把XAML元素添加到我的應(yīng)用程序中? 答:有數(shù)百種不同的方法可以在運(yùn)行時(shí)把新的XAML元素添加到你的Silverlight應(yīng)用程序中。我個(gè)人最喜歡的是這個(gè)例子,它說明了你怎樣使用LINQ來在Silverlight應(yīng)用程序中建立一個(gè)附加的data-driven元素(http://www.silverlight.net/learn/videos/all/use-linq-to-dynamically-create-xaml-elements/)。關(guān)于如何用編程的方式添加新的XAML元素,如果你正在找一個(gè)的簡(jiǎn)單的指南,我可以提供給你一個(gè):“Silverlight控件的動(dòng)態(tài)處理”。(http://dotnetslackers.com/articles/silverlight/Dynamic-Manipulation-of-Silverlight-controls.aspx),它總結(jié)的很好。 10,在Silverlight應(yīng)用程序中,實(shí)現(xiàn)表單驗(yàn)證的最好方法是什么? 答:哪里有數(shù)據(jù),哪里就一定需要驗(yàn)證。Silverlight自帶了驗(yàn)證框架,和ASP.NET自帶的驗(yàn)證框架很相似。關(guān)于如何入門,這是我找到的一個(gè)最好的例子:從入門到精通:Silverlight 3 表單驗(yàn)證(http://www.silverlightshow.net/items/Creating-Rich-Data-Forms-in-Silverlight-3-Validation.aspx)。 別忘了實(shí)踐一下這些方法,我希望在社區(qū)中這些問題可以得到更好的解答,或者,如果能提出一些其他的更好的問題,那就更好了。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |