WPF 中的 Pack URI-访问程序集资源

时间:2014-05-15 16:44:59   收藏:0   阅读:520

在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括:

  • 指定当应用程序第一次启动时显示的用户界面 (UI)。

  • 加载图像。

  • 导航到页

  • 加载不可执行的数据文件。

 

在代码中使用 Pack URI

在代码中,可以通过实例化 Uri 类并将 pack URI 作为参数传递给构造函数来指定 pack URI。下面的示例说明了这一点。

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

默认情况下,Uri 类将 pack URI 视为绝对 pack URI。因此,在使用相对 pack URI 创建 Uri 类的实例时会引发异常。

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

幸运的是,Uri 类构造函数的 Uri(String, UriKind) 重载可以接受一个类型为 UriKind 的参数,使您可以指定 pack URI 是绝对的还是相对的。

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);
 

文件
 相对 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。

bubuko.com,布布扣

 bubuko.com,布布扣

现在我们新建一个WPF Application,然后添加这个Library的引用。

bubuko.com,布布扣

则我们可以这样访问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));

程序运行如下:
bubuko.com,布布扣

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

WPF 中的 Pack URI-访问程序集资源,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!