WPF資源路徑詳細(xì)概念詳解
我們?cè)谶@篇文章中將會(huì)為大家詳細(xì)介紹有關(guān)WPF資源路徑的一些概念介紹。希望大家可以通過(guò)本文介紹的內(nèi)容能加深對(duì)WPF的理解。#t#
在項(xiàng)目中增加兩張圖片Content.jpg和Resource.jpg,分別將其生成操作屬性設(shè)置為Content和Resource。在界面中增加兩個(gè)Image控件ImgContent和ImgResource,在XAML中分別設(shè)置Source路徑為Content.jpg和Resource.jpg。
運(yùn)行后ImgResource能正常顯示圖片,但是ImgContent控件無(wú)顯示。將Content.jpg圖片拷貝至應(yīng)用程序的Debug目錄中,ImgContent控件可顯示圖片。
生成操作設(shè)置為Resource,生成的時(shí)候資源將添加到程序集中。可以嘗試將原有的圖片刪除,圖片正常顯示。將原有圖片用新圖片替換,仍顯示原有圖片。只有選擇重新生成操作才能更新圖片。
生成操作設(shè)置為Content,并不會(huì)添加至程序集,而且只有把WPF資源路徑放置在程序運(yùn)行目錄才能訪問(wèn)到資源。程序運(yùn)行目錄調(diào)試時(shí)是Debug目錄,安裝后就是程序的安裝目錄。
與直接把資源放置在程序運(yùn)行目錄不同的是,添加Content資源文件,會(huì)向程序集(AssemblyAssociatedContentFile)中添加一個(gè)定制特性,該程序集記錄文件是否存在及其相對(duì)位置。我發(fā)現(xiàn)VS2008有一個(gè)小Bug,在解決方案管理器中將Content.jpg改名為Con.jpg,Bug目錄下的圖片也做相應(yīng)的改變。
此時(shí)編譯器報(bào)錯(cuò):文件Con.jpg不是項(xiàng)目的一部分或其“Build Action”屬性未設(shè)置為“Resource”。但是按F5運(yùn)行,生成成功并正常顯示??梢?jiàn)在改變Content資源的時(shí)候,程序集中的定制特性沒(méi)有做相應(yīng)的變化。
刪除XAML中的Source屬性,在后臺(tái)為兩個(gè)圖片控件設(shè)置Source屬性。有如下三種WPF資源路徑方式。
第一種
- imgContent.Source = new
BitmapImage(new Uri(
"Content.jpg", UriKind.Relative));- imgResource.Source = new
BitmapImage(new Uri
("Resource.jpg", UriKind.Relative));
第二種
- imgContent.Source = new
BitmapImage(new Uri("pack:
//application:,,,/Content.jpg"));- imgResource.Source = new
BitmapImage(new Uri("pack:
//application:,,,/Resource.jpg"));
第三種
- imgContent.Source = new
BitmapImage(new Uri("pack:
//SiteOfOrigin:,,,/Content.jpg"));
第一種和第二種都可以訪問(wèn)相對(duì)WPF資源路徑的Resource和Content資源。第三種方式可以訪問(wèn)網(wǎng)站運(yùn)行目錄下的Content資源文件以及完全松散的文件。完全松散的文件指那些沒(méi)有添加到項(xiàng)目中,只是拷貝在程序目錄中的文件。
應(yīng)用程序根本不知道它的存在。pack://application:,,,/Content.jpg表示當(dāng)前項(xiàng)目的資源。它是pack://application:,,,/DllName;Component/Content.jpg的簡(jiǎn)寫(xiě)。將DllName替換成其他程序集,就可以訪問(wèn)其他程序集的資源。
pack://SiteOfOrigin:,,,/Content.jpg表示從部署位置訪問(wèn)文件。
pack URI格式是XML文件規(guī)范的一部分,具體格式如下 pack://packageURI/partPath。PackageURI實(shí)際上是在URI中放一個(gè)URI,它是把反斜杠都變成了逗號(hào)。packageURI的WPF資源路徑可以志向一個(gè)XPS文檔,例如file : /// c: /Document . xps會(huì)被編碼為file:...c:,Document.xps。在WPF程序中有兩種URI系統(tǒng)是特別處理的:
siteOfOrigin:/// 編碼后siteOfOrigin:,,,
application:/// 編碼后application:,,,
3個(gè)逗號(hào)其實(shí)是反斜杠編碼過(guò)來(lái)的。