WPF 中的 Pack URI-訪問程序集資源

在 Windows Presentation Foundation (WPF) 中,使用統一資源標識符 (URI) 標識和加載文件的方式有不少,包括:app

  • 指定當應用程序第一次啓動時顯示的用戶界面 (UI)。ide

  • 加載圖像。函數

  • 導航到頁spa

  • 加載不可執行的數據文件。3d

 

在代碼中使用 Pack URI

在代碼中,能夠經過實例化 Uri 類並將 pack URI 做爲參數傳遞給構造函數來指定 pack URI。下面的示例說明了這一點。code

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

默認狀況下,Uri 類將 pack URI 視爲絕對 pack URI。所以,在使用相對 pack URI 建立 Uri 類的實例時會引起異常。component

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

幸運的是,Uri 類構造函數的 Uri(String, UriKind) 重載能夠接受一個類型爲 UriKind 的參數,使您能夠指定 pack URI 是絕對的仍是相對的。blog

C#
// 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圖片

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

資源文件 — 本地程序集
 Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
 
子文件夾中的資源文件 — 本地程序集
 Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);
 
資源文件 — 所引用的程序集
 Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
 
所引用的程序集的子文件夾中的資源文件
 Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
 
所引用的版本化程序集中的資源文件
 Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);
 
內容文件
 Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);
 
子文件夾中的內容文件
 Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
 
源站點文件
 Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
 
子文件夾中的源站點文件
 Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);
 ip

文件
 相對 pack URI
 
資源文件 — 本地程序集
 Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);
 
子文件夾中的資源文件 — 本地程序集
 Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);
 
資源文件 — 所引用的程序集
 Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
 
子文件夾中的資源文件 — 所引用的程序集
 Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
 
內容文件
 Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
 
子文件夾中的內容文件
 Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);
 

 

假如咱們定義一個WPF User Control Library,並在其中添加一張圖片,設置其屬性爲Resource。

 

如今咱們新建一個WPF Application,而後添加這個Library的引用。

則咱們能夠這樣訪問Library中的Resource,Code Snip以下:

<Image  Source="/ClassLibraryResources;component/Images/6.png" />

在C#中,以下訪問:

image1.Source = new BitmapImage(new Uri("/ClassLibraryResources;component/Images/6.png",UriKind.Relative));

程序運行以下:

官方網址:http://msdn.microsoft.com/zh-cn/library/aa970069.aspx

相關文章
相關標籤/搜索