WPF的资源有两种,一种称为“程序集资源”( assembly resources)或者“二进制资源”(binary resources),在MSDN中将其称为“应用程序数据文件”(application data files);另外一种称为资源或者对象资源(object resources)、“逻辑资源”(logic resources),甚至“声明式资源”(declarative resources)。统称前者为程序集资源,后者为逻辑资源。
一、程序集资源
应用程序中常常依赖一些XAML、图片、音频和视频等文件,可以将其作为程序集资源组织起来。程序集资源可以以如下三种方式打包:
1.资源文件(Resource File):直接嵌入到程序集中。
资源文件是被直接打包到程序集当中的,先看下面一个示例。我们在解决方案资源管理器中的目录上点击右键,然后选中添加|新建文件夹,然后在这个新建的文件夹中添加一些图片。如下图,我们在图片文件的属性里面看到它的Build Action选项均为Resource。
下面我们在程序中使用这些图片文件 ,代码如下:
<Window x:Class="AssemblyResources.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<GroupBox Header="Pack URIs">
<StackPanel>
<Image Source="pack://application:,,,/Image/1348648395834.jpg"/>
</StackPanel>
</GroupBox>
</StackPanel>
</Grid>
</Window>
在图片文件的属性页中有一个Build Action成员,这个成员有很多可选值。其中有一个Embedded Resource(嵌入式资源)和Resource,这两者都会在应用程序中嵌入一个程序集资源,前者用于在Winform程序中嵌入程序集资源,后者用于WPF。在上述代码中,有一句引用资源的XAML代码:pack://application:,,,/Image/1348648395834.jpg ,这种字符串是按照URI的规范来写的,我们也可以使用代码来访问这个图片资源,如下