Silverlight 資源的使用
我們在Silverlight 項目中,新加一個文件,比如一個圖片文件,這個文件的屬性會有下面2個選項,這兩個選項決定了這個圖片資源如何存儲,如何使用。
先說簡單的,資源文件的 Copy to OutPut Directory 屬性, 這個屬性有如下三個選項:
他們都是在程序編譯或者部署時,判斷此資源文件是否要同步用的。
Do not copy | 不做數據同步 |
Copy always | 每次都會被同步過去 |
Copy if newer | 當有新版本存在時,才會被同步過去 |
Build Action 屬性則復雜多了, 下面是VS2010中, Silverlight 4 項目資源文件的Build Action 屬性截圖。
注意,上面羅列了一些不適合資源文件的 Build Action 屬性,在使用資源文件時,可以忽略這些。
None | 資源既不會被集成到程序集內,也不會打包到xap包中。不過我們可以通過設置CopyToOutputDirectory選項讓其自動拷貝到xap包所在目錄。 這種情況下,訪問這個圖片的相對Uri需要以"/"開始。 適用場景: 在大多數情況下,我們希望把video/audio文件放到xap的外面,因為這種文件一般都比較大,會影響silverlight應用的加載,而且一般的視頻音頻文件都是壓縮格式的,放到xap中也不會起到減少他們文件大小的作用。 |
Compile | 不適合用于資源文件。 類文件要用"Compile"生成操作,就是指項目里.cs或.vb文件。 |
Content | 資源會被打包在Xap包里面。 這種情況下,訪問這個圖片的相對Uri需要以"/"開始。 在這種方式下,如果沒有在xap中找到圖片文件,那么silverlight會自動從當前xap應用所在的文件夾下來找所需圖片文件, 如果還沒有找到那么就觸發ImageFailed事件, 這種方式比較適合在多個程序集引用相同文件時采用。 |
Embedded Resource |
這種方式會把文件嵌入到程序集中,silverlight無法通過Uri引用在xaml和c#里對這個文件進行使用,微軟不建議在silverlight采用這種方式在程序集里嵌入資源。 |
ApplicationDefinition |
silverlight程序的入口xaml文件(默認就是App.xaml)應該設置為這個"應用定義"。其他文件都不適合用這個。 |
Page | 不適合用于資源文件。 所有的用戶控件,頁面和子窗體(usercontrol/page/childwindow)的xaml文件應該采用的生成操作。 如果改為別的方式那么會導致后臺對應的代碼文件無法鏈接到這個xaml文件。采用"Page" build action時xaml里的錯誤會導致工程無法正確生成。 |
CodeAnalysisDictionary | 代碼分析使用,Silverlight中可以忽略 |
Resource | 資源會被打包在程序集內部。 選擇這種生成方式后,該資源文件會被嵌入到該應用的程序集中,就是說打開生成的xap是看不到這個文件的。 可以用相對于當前的XAML文件的相對Uri訪問, 在子文件夾里的可以用 最保險的方式是采用特有的程序集資源URI訪問,格式為 這種方式還可以引用到xap中的其他程序集中的圖片。 這種生成方式的系統資源可以直接用Application.GetResourceStream(uri).Stream在代碼里來得到。 |
SplashScreen |
"SplashScreen"是這個選項是WPF的啟動畫面使用的。 silverlight啟動加載畫面是用的其他方式實現的,所以在silverlight里不要用這個方式。 |
EntityDeploy | 這個是EntityFramework采用的生成方式,在silverlight里是沒用。 |
參考資料:
分析silverlight里的URI引用資源文件的各種情況
http://bbs.blueidea.com/viewthread.php?tid=2941697
Silverlight圖片相對路徑的設置
http://www.cnblogs.com/yangfan/archive/2009/12/14/1623647.html
關于Silverlight資源文件(如:圖片)的放置位置及其引用(相對路徑)
http://www.cnblogs.com/star250/archive/2009/10/15/1583665.html
Silverlight資源文件
http://msdn.microsoft.com/zh-cn/library/cc296240(VS.95).aspx
圖片等資源的引用路徑問題
http://www.cnblogs.com/kevinyang/archive/2008/11/16/1334712.html