Pack URIs in WPF


一開始看到WPF里面經常用如下語句來構造資源文件Uri:

Uri uri = new Uri("/AssemblyName;component/image.png");

我還以為這種格式的字符串是URI標准規定的,但是網上查了一下卻沒發現有這種格式的URI字符串。

 

URI是統一資源標識符,通用文法為:

協議名(http,https,ftp,file等)+冒號+協議所對應的內容

URI又分為URL和URN,URL是用來定義一個資源的訪問路徑.而URN則是用來定義一個資源的名稱。(http://zh.wikipedia.org/zh/統一資源標志符)

 

仔細看了一下MSDN,才發現上面格式的字符串是微軟件自己擴展出來的一種URI格式,即Pack URI.這種URI在WPF里用得非常多,主要用來定位

資源文件,以及Xaml文件等。

Pack URI主要是用於描述一個Package中所包含的組成單元。

1. Pack URI的主要文法

pack://authority/path

其中authority指這里所指的Package的類型,而path主要指這里所指的組成單元在Package中路徑。

WPF所支持的authority包括:application:/// 和 siteoforigin:/// :

前者主要用來描述在編繹時就已知的資源(比如:資源文件等被Project所引用的文件在編繹時刻均已知),

而后者主要用來描述在編繹時無法確定其狀態的外部資源(比如:硬盤上的某個文件,或者網格上的某個文件)。

注意:在實際構建Pack URI的時需要將authority中所包含的"/"換成",". 因此 application:/// 應該為 application:,,,,siteoforigin:///類推。

2. Pack URI的用法

  (1)表示當前Assembly中所引用的資源時,采用如下格式構建Pack URI

pack://application:,,,/(資源相對於Assembly所在目錄的相對路徑)

  (2)表示當前Assemby所引用的其它Assembly所引用的資源時,采用如下格式構建Pack URI

pack://application:,,,/AssemblyShortName[;Version][;PublicKey];component/(資源相對於Assembly所在目錄的相對路徑)

  (3)表示siteoforigin類型的資源時,采用如下格式構建Pack URI

pack://siteoforigin:,,,/(資源相對於當前執行的assembly所在位置的路徑)

3. Absolute pack URI and relative pack URI

以上所說的都是Absolute pack URI,格式包含schema://authority/path.字符串比較長,寫起來不是很方便。

因此還有一種簡化版的relative pack URI,構造時只需要使用path即可。

注意:當表示當前Assembly中所引用的資源時,path需表示目標資源相對於當前路徑的相對路徑。在路徑前加"/"表示相對於Assembly的根目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM