Silverlight開(kāi)發(fā)的一些最佳實(shí)踐分享
原創(chuàng)我從2008年3月開(kāi)始使用WPF/Silverlight開(kāi)發(fā),這幾年來(lái)我學(xué)到了很多東西,我打算分享一些WPF/Silverlight開(kāi)發(fā)***實(shí)踐,希望這些技巧在你編輯XAML代碼時(shí)能有所幫助。
在XAML文件中不要使用無(wú)用的xmlns命名空間,這樣會(huì)導(dǎo)致Silverlight頁(yè)面加載時(shí)間過(guò)長(zhǎng)。不要在單個(gè)XAML頁(yè)面中增加多個(gè)相同的命名空間,這樣會(huì)破壞XAML代碼的可維護(hù)性,運(yùn)行時(shí)多次加載相同名稱(chēng)的命名空間可能會(huì)引起各種內(nèi)存問(wèn)題。
為xmlns命名空間前綴使用合適的名字,例如,xmlns:commonControls就比xmlns:cctrl更有意義,這樣可以避免將來(lái)命名空間的多次聲明。Xmlns命名空間的前綴中盡量避免使用local,***用localControls或localConverters代替,在相同的程序集中可能有兩個(gè)或多個(gè)命名空間(如Controls或Converters等),在這種情況下,使用合適的前綴名將有助于正確區(qū)別它們。
當(dāng)增加一個(gè)無(wú)元素的控件時(shí),***使用自閉合標(biāo)簽“/>”關(guān)閉,不要使用硬關(guān)閉標(biāo)簽“</tag>”,這樣X(jué)AML代碼看起來(lái)會(huì)更清爽。如果資源沒(méi)有被使用,***移除這些不必要的資源鍵,它們會(huì)消耗更多的內(nèi)存,你可能會(huì)因此遇到很多惱人的問(wèn)題,如果你后面會(huì)使用到它們,你可以隨時(shí)來(lái)添加它們。
不要使用額外的面板(如Grid,StackPanel,Canvas等)。如果你需要使用其它面板,首先應(yīng)該嘗試Grid,Grid擁有靈活的UI布局,對(duì)調(diào)整應(yīng)用程序大小很有用。不要企圖給Silverlight頁(yè)面中的所有控件起一個(gè)名字,因?yàn)樵诩虞d時(shí)會(huì)創(chuàng)建一些不必要的對(duì)象,只需要為那些后面將會(huì)用到的控件起一個(gè)名字即可,如果你在使用MVVM模式,你可以移除幾乎所有控件的名字。
使用控件的Visibility屬性代替Opacity屬性隱藏內(nèi)容,Opacity屬性值設(shè)為0雖然可以起到隱藏作用,但內(nèi)存占用和UI空間占用是不會(huì)減少的,相反,Visibility屬性會(huì)釋放內(nèi)存和UI空間,因此可以將有限的空間放置其它控件。在XAML代碼中使用正確的格式,這樣會(huì)使代碼更好看,也更易于維護(hù)。
盡可能為XAML增加注釋?zhuān)?dāng)過(guò)了很久你再查看這些代碼時(shí),你才能想起當(dāng)初這樣寫(xiě)的動(dòng)機(jī),此外,如果是多人協(xié)作,合理的注釋會(huì)減少其他人員的代碼閱讀和理解時(shí)間,促進(jìn)協(xié)作生產(chǎn)力的提高。使用StaticResource代替DynamicResource,首先它會(huì)提升性能,其次在開(kāi)發(fā)時(shí)可以跑出異常信息,有利于調(diào)試。
移除不需要的樣式。如果你想跨應(yīng)用程序共享你的樣式,***在單獨(dú)的文件中添加你的樣式,如果只針對(duì)某個(gè)特殊的頁(yè)面,***在頁(yè)面資源文件中添加它們。