在 Windows Presentation Foundation (WPF) 中,使用統一資源標識符 (URI) 標識和加載文件的方式有不少,包括:app
-
指定當應用程序第一次啓動時顯示的用戶界面 (UI)。ide
-
加載圖像。函數
-
導航到頁spa
-
加載不可執行的數據文件。3d
在 Windows Presentation Foundation (WPF) 中,使用統一資源標識符 (URI) 標識和加載文件的方式有不少,包括:app
指定當應用程序第一次啓動時顯示的用戶界面 (UI)。ide
加載圖像。函數
導航到頁spa
加載不可執行的數據文件。3d
在代碼中,能夠經過實例化 Uri 類並將 pack URI 做爲參數傳遞給構造函數來指定 pack URI。下面的示例說明了這一點。code
Uri uri = new Uri("pack://application:,,,/File.xaml");
默認狀況下,Uri 類將 pack URI 視爲絕對 pack URI。所以,在使用相對 pack URI 建立 Uri 類的實例時會引起異常。component
Uri uri = new Uri("/File.xaml");
幸運的是,Uri 類構造函數的 Uri(String, UriKind) 重載能夠接受一個類型爲 UriKind 的參數,使您能夠指定 pack URI 是絕對的仍是相對的。blog
// 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);
資源文件 — 本地程序集
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));
程序運行以下: