- A+
一、WPF支持程序级资源(也称为二进制资源),和对象级资源。
二、程序级资源 之 外部文件
-
为什么要将外部文件转成程序资源:因为外部文件与程序主体分离,有可能丢失或者损坏。所以编译器允许我们把外部文件编译进程序主体,成为程序主体不可分割的一部分。
- 添加方式:程序级资源可以添加图片、音频、视频等文件,添加方法是仅需简单的将其加入项目即可。
-
访问方式:
① 完整的Pack URI路径:pack://application,,,[/程序集名称;][可选版本号;][文件夹名称/]文件名称
② 因为 pack://application,,,一般可以省略,而[/程序集名称;][可选版本号;]常使用缺省值,故缩略的写法:[文件夹名称/]文件名称
注:Pack URI使用正斜线(/)表示路径
- 使用方式:
① XAML中使用资源:
1 <Image Source="Resources/Img/alarm_bone.png" Width="65" Height="65"/> 2 <Image Source="pack://application:,,,/Resources/Img/alarm_bone.png" Width="65" Height="65"/>
② 后台代码中使用资源:
1 Uri imgUri = new Uri(@"Resources/Img/alarm_bone.png",UriKind.Relative); 2 Uri imgUri = new Uri(@"pack://application:,,,/Resources/Img/alarm_bone.png",UriKind.Absolute); 3 img.Source = new BitmapImage(imgUri);
注:使用完整写法意味着绝对路径,代表根目录的/不能省略,绝对路径的UriKind必须是Absolute;
使用缩略写法意味着相对路径,代表根目录的/可以省略,相对路径的UriKind必须是Relative。
三、程序资源 之 资源文件
程序级资源除了图片、音频文件之外,还可以添加的资源是字符串,利用程序中的Properties名称空间中的Resource.resx资源文件。
-
Resource.resx文件内容是键值对的形式;
-
为了让编译器能够访问这个类,一定把Resource.resx的访问级别由Internal改为Public;
- Properties名称空间中的各个文件:
1. AssemblyInfo.cs:查看软件的版本信息
2. Resource.resx:资源文件,里面定义了你程序需要的字符串
3. Resources.Designer.cs:根据resx的内容,自动生成的C#后台代码
4. Setting.settings:可以编写属性、方法;通常用于窗口的某些设置、绑定
5. Setting.Designer.cs:根据settings的内容,自动生成的C#后台代码
- 使用方式
① XAML中使用资源文件
1 <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 2 <TextBlock x:Name="txtblock" Text="{x:Static prop:Resources.UserName}"/> 3 </StackPanel>
注:Resource.resx经过编译变成Properties名称空间中的Resource类,那么就可以使用x:Static标签扩展来访问资源(因为XAML中是不能编写逻辑代码的,所以使用x:Static来引用对应xaml.cs文件中写的公共静态属性值(或字段));Properties名称空间映射到XAML的命名空间是prop
② C#后台代码使用资源文件
1 this.txtblock.Text = Properties.Resources.Password;
-
优势:便于程序的国际化、本地化(方便切换显示的语言)