WPF備忘錄(7)WPF圖片資源路徑介紹

來源:互聯網
上載者:User

標籤:圖片替換   api   圖片刪除   res   刪除   選擇   toolbar   目錄   resource   

原文:WPF備忘錄(7)WPF圖片資源路徑介紹

在項目中增加兩張圖片Content.jpg和Resource.jpg,分別將其產生操作屬性設定為Content和Resource。
     在介面中增加兩個Image控制項ImgContent和ImgResource,在XAML中分別設定Source路徑為Content.jpg和Resource.jpg。運行後ImgResource能正常顯示圖片,但是ImgContent控制項無顯示。將Content.jpg圖片拷貝至應用程式的Debug目錄中,ImgContent控制項可顯示圖片。
     產生操作設定為Resource,產生的時候資源將添加到程式集中。可以嘗試將原有的圖片刪除,圖片正常顯示。將原有圖片用新圖片替換,仍顯示原有圖片。只有選擇重建操作才能更新圖片。
     產生操作設定為Content,並不會添加至程式集,而且只有把資源放置在程式運行目錄才能訪問到資源。程式運行目錄調試時是Debug目錄,安裝後就是程式的安裝目錄。與直接把資源放置在程式運行目錄不同的是,添加Content資源檔,會向程式集(AssemblyAssociatedContentFile)中添加一個定製特性,該程式集記錄檔案是否存在及其相對位置。我發現VS2008有一個小Bug,在解決方案管理器中將Content.jpg改名為Con.jpg,Bug目錄下的圖片也做相應的改變。此時編譯器報錯:檔案Con.jpg不是項目的一部分或其“Build Action”屬性未設定為“Resource”。但是按F5運行,產生成功並正常顯示。可見在改變Content資源的時候,程式集中的定製特性沒有做相應的變化。 
     刪除XAML中的Source屬性,在後台為兩個圖片控制項設定Source屬性。有如下三種方式。  

第一種
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"));

     第一種和第二種都可以訪問相對路徑的Resource和Content資源。第三種方式可以訪問網站運行目錄下的Content資源檔以及完全鬆散的檔案。完全鬆散的檔案指那些沒有添加到項目中,只是拷貝在程式目錄中的檔案。應用程式根本不知道它的存在。
     pack://application:,,,/Content.jpg表示當前項目的資源。它是pack://application:,,,/DllName;Component/Content.jpg的簡寫。將DllName替換成其他程式集,就可以訪問其他程式集的資源。
     pack://SiteOfOrigin:,,,/Content.jpg表示從部署位置訪問檔案。
     pack URI格式是XML檔案規格的一部分,具體格式如下 pack://packageURI/partPath。PackageURI實際上是在URI中放一個URI,它是把反斜線都變成了逗號。packageURI可以志向一個XPS文檔,例如file : /// c: /Document . xps會被編碼為file:...c:,Document.xps。在WPF程式中有兩種URI系統是特別處理的:
     siteOfOrigin:/// 編碼後siteOfOrigin:,,,
     application:///   編碼後application:,,,
  3個逗號其實是反斜線編碼過來的。

WPF備忘錄(7)WPF圖片資源路徑介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.