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, 防止以后变动查找不到代码.