WPF中的Pack URI


更多資源:http://denghejun.github.io

Aa970069.collapse_all(zh-cn,VS.110).gif問題

 說來也簡單:首先,我在WPF項目中建立了一個用戶自定義控件(CustomControl),VS模板為我們自動生成了

CustomControl1和Theme文件夾(里邊包含一個Generic.xaml):

接着,我想把它移動到一個新的類庫(DLL)里去:

然后我添加了對類庫的引用在WPF項目中,我開始嘗試使用該自定義控件,結果,發現顯示的結果始終不對,但是也

沒有報錯。究其原因,肯定是xaml沒有加載到,致使界面沒有渲染模板。最后開始搜索MSDN,發現WPF應用程序外

部包引用一般使用pack://規范。

Aa970069.collapse_all(zh-cn,VS.110).gifPACK URI

   表 1:標記中的絕對 Pack URI

 

文件

絕對 pack URI

資源文件 — 本地程序集

"pack://application:,,,/ResourceFile.xaml"

子文件夾中的資源文件 — 本地程序集

"pack://application:,,,/Subfolder/ResourceFile.xaml"

資源文件 — 所引用的程序集

"pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"

所引用的程序集的子文件夾中的資源文件

"pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"

所引用的版本化程序集中的資源文件

"pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"

內容文件

"pack://application:,,,/ContentFile.xaml"

子文件夾中的內容文件

"pack://application:,,,/Subfolder/ContentFile.xaml"

源站點文件

"pack://siteoforigin:,,,/SOOFile.xaml"

子文件夾中的源站點文件

"pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

 

    表 2:標記中的相對 Pack URI

 

文件

相對 pack URI

本地程序集中的資源文件

"/ResourceFile.xaml"

本地程序集的子文件夾中的資源文件

"/Subfolder/ResourceFile.xaml"

所引用的程序集中的資源文件

"/ReferencedAssembly;component/ResourceFile.xaml"

所引用的程序集的子文件夾中的資源文件

"/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"

內容文件

"/ContentFile.xaml"

子文件夾中的內容文件

"/Subfolder/ContentFile.xaml"

Aa970069.collapse_all(zh-cn,VS.110).gif在代碼中使用 Pack URI

在代碼中,可以通過實例化 Uri 類並將 pack URI 作為參數傳遞給構造函數來指定 pack URI。 下面的示例說明了這一點。

Uri uri = new Uri("pack://application:,,,/File.xaml");

 

默認情況下,Uri 類將 pack URI 視為絕對 pack URI。 因此,在使用相對 pack URI 創建 Uri 類的實例時會引發異常。

Uri uri = new Uri("/File.xaml");

 

幸運的是,Uri 類構造函數的 Uri(String, UriKind) 重載可以接受一個類型為 UriKind 的參數,使您可以指定 pack URI 是絕對

URI 還是相對 URI。

// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml", UriKind.Relative);

 

當您能夠確定所提供的 pack URI 是相對 pack URI 還是絕對 pack URI 的時候,應該只指定 Absolute 或 Relative。 如果您不了解

所使用的 pack URI 的類型(例如,當用戶在運行時輸入 pack URI 時),請改用RelativeOrAbsolute

// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);

 



SO,外部資源文件,比如視頻、圖片等,路徑的引用都需要使用pack uri。
另外,還有,為什么在普通類庫中右鍵添加新建項,沒有wpf 自定義控件選項,只能手動建,或者從WPF項目建立后移植過來。


免責聲明!

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



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