0x01. 概要
一般我们会在项目中某个目录中统一管理二进制资源文件, 如图片, 文档, 音频等等.
新建的WPF APP项目默认是没有类似 Android res
这样的文件夹来管理资源文件. 如何建立资源文件夹并正常使用呢?
0x02. 创建过程
1. 创建资源文件夹
对项目右键, 然后 新建 -> 文件夹
:
文件夹名称命名为自己想要名称, 比如: Resources
.
2. 创建分类文件夹
可根据需要在上一步的 Resources
文件夹内创建分类文件夹, 比如:
- Images
- Audios
3. 创建资源字典文件
在 Resources
文件右键, 新建 -> 资源字典(ResourceDictionary)文件,并填写名称.
此处填写的是 DemoRes.xaml
, 但是到这一步项目还不能识别到该文件.
4. 添加资源字典到项目配置
打开项目中的 App.xaml
文件, 在 ApplicationResource
节点中添加 ResourceDictionary
节点:
<Application x:Class="WPFDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="../MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="../Resources/DemoRes.xaml"/>
</Application.Resources>
</Application>
这样项目就可以识别该资源字典文件了.
5. 测试识别结果
在 Resources\Images
文件夹中添加一个图片文件, 并尝试在布局文件中添加引用.
然后在布局文件中引用:
<Image x:Name="PreImage" Width="300" Height="300" Stretch="Uniform"
Source="{StaticResource HeaderImage}">
然后编译测试, 可以通过~.
0x03. 创建多个资源文件字典
一般的, 在国际化的时候不会把字符串资源也写在布局文件, 根据需要读取相应国家和语言的字符串资源. 而且也会将图片资源和字符串资源配置分来. 比如:
- 图片资源:
../Resources/Images/images.xaml
- 字符资源:
../Resources/Strings/strings.xaml
我们修改上面的文件夹及文件如下:
同样需要修改APP配置:App.xaml
:
<Application x:Class="WPFDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="../MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Resources/Images/images.xaml"/>
<ResourceDictionary Source="../Resources/Strings/strings.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
即将资源字典merge多个文件. 后续根据 I18N 的需求可以添加对应国家的资源文件, 如:
- 默认语言: strings.xaml
- 中文简体: strings-zh-CN.xaml
- 中文繁体: strings-zh-TW.xaml
- 英文: strings-en.xaml
本次的文章在项目: Dev-Wiki/WPFDemo, 代码在tag: create_resource_file
, 防止以后变动查找不到代码.