前面几个小节介绍了如何引用自身项目的资源,而有时在应用程序开发过程中可能需要访问其他项目中的资源。例如,当几个人或十几个人一起设计一个解决方案时,每个人的工作都是不同的,编写的项目也是不同的,但是每个人都可能需要访问其他项目的某些资源,这就引入了类库资源的概念。对于每一个项目都能够引用的资源,我们称它为类库资源。下面通过一个示例具体讲解如何引用类库中的资源。

新建一个Windows应用商店的空白应用程序项目,并命名为GetClassLibraryResources。在解决方案资源管理器中,右键单击解决方案图标à添加à新建项目,选择“类库(Windows 应用商店应用项目)”模版,并命名为ResourcesLibrary,完成上述操作后就在一个解决方案中添加了两个项目,一个是空白的应用程序项目,另一个是类库项目。

为了能让GetClassLibraryResources项目引用ResourcesLibrary类库中的资源,需要在GetClassLibraryResources项目中添加对ResourcesLibrary类库项目的引用,操作方法是:右键单击GetClassLibraryResources项目中的“引用”文件夹à添加引用,打开“引用管理器”对话框,选择左侧菜单栏中的“解决方案”下面的“项目”菜单项后,在列表中选择ResourcesLibrary类库并确定,这时如果ResourcesLibrary类库中有GetClassLibraryResources项目需要的资源,那么GetClassLibraryResources项目就可以引用ResourcesLibrary类库中的资源。

接下来在GetClassLibraryResources项目和ResourcesLibrary类库中分别添加资源文件及资源。在GetClassLibraryResources项目中添加同18.2.3小节中项目的文件夹和资源文件,此资源文件可以不添加资源。

在ResourcesLibrary类库中添加一个“Strings”文件夹。在“Strings”文件夹下,新建“en-US”和“zh-CN”两个子文件夹并各添加一个名为“Resources.resw”的资源文件。在资源文件中分别添加如图18-15和图18-16所示的资源。

图18-15 ResourcesLibrary类库的Strings/en-US/Resources.resw资源文件中添加的资源

图18-16 ResourcesLibrary类库的Strings/zh-CN/Resources.resw资源文件中添加的资源

在ResourcesLibrary类库的Class1.cs文件中的ResourcesLibrary命名空间下添加一个名为“LocalizeResourcesLibrary”的类,用于获取类库中的字符串资源的值,代码如下所示:

using Windows.ApplicationModel.Resources;

 

public class LocalizeResourcesLibrary

{

    ResourceLoader resourceLoader = null;

    public string LibraryResources

    {

        get

        {

            String value;

            GetLibraryResources("ClassLibraryResources", out value);

            return value;

        }

    }

    //通过引用参数传递类库资源文件中的资源值   

    private void GetLibraryResources(string resourceName, out string resourceValue)

    {

        if (resourceLoader == null)

        {

            //新建一个ResourceLoader类的对象resourceLoader

            resourceLoader = new ResourceLoader("ResourcesLibrary/Resources");

        }

        resourceValue = resourceLoader.GetString(resourceName);

    }

}

在LocalizeResourcesLibrary类中,定义一个ResourceLoader类的对象resourceLoader并赋值为空。然后定义LibraryResources属性用于输出字符串资源。在LibraryResources属性的get方法中调用GetLibraryResources方法用于获取字符串资源。

在GetLibraryResources方法中,先判断resourceLoader对象是否为空,当resourceLoader对象为空,以ResourcesLibrary类库中存储资源文件的路径“ResourcesLibrary/Resources”作为参数新建一个ResourceLoader类的对象resourceLoader,然后使用GetLibraryResource方法的参数resourceName作为调用resourceLoader对象GetString方法的参数,将获取的值赋给GetLibraryResource方法的引用参数resourceValue,用于返回获取到的资源值。如果resourceLoader对象不为空则无须新建一个ResourceLoader类的对象resourceLoader。

下面在GetClassLibraryResources项目中添加界面和后台代码实现引用ResourcesLibrary类库中的资源。首先在MainPage.xaml文件的Grid元素中添加如下代码。

<Button Content="获取类库资源" HorizontalAlignment="Left" Margin="682,196,0,0" Click="GetResources_Click" VerticalAlignment="Top"/>

<TextBlock Name="GetResourcesFromProject" HorizontalAlignment="Left" Margin="300,256,0,0" TextWrapping="Wrap" Text="引用方式获取类库中的资源:"  FontSize="20" VerticalAlignment="Top" Height="38" Width="629"/>

<TextBlock Name="GetResourcesFromLibrary" HorizontalAlignment="Left" Margin="300,314,0,0" TextWrapping="Wrap" Text="直接获取类库中的资源:"  FontSize="20" VerticalAlignment="Top" Height="38" Width="630"/>

<TextBlock HorizontalAlignment="Left" Margin="300,202,0,0" TextWrapping="Wrap" Text="单击按钮获取类库资源" FontSize="25" VerticalAlignment="Top" Height="25" Width="360"/>

在上面的代码中添加了一个显示内容为“获取类库资源”按钮和三个TextBlock文本块,三个文本块分别用于显示“引用方式获取类库中的资源:”、“直接获取类库中的资源:”和“点击按钮获取类库资源”文本信息。单击按钮将类库中资源的值显示在“引用方式获取类库中的资源:”和“直接获取类库中的资源:”两个文本块中。

界面效果如图18-17所示。

图18-17 GetClassLibraryResources项目的界面效果

然后在MainPage.xaml.cs文件中添加单击“获取类库资源”按钮的事件处理方法GetResources_Click,单击按钮使用引用和直接获取的方式把ResourcesLibrary类库中的资源值显示在相应的文本块中,代码如下所示:

using Windows.ApplicationModel.Resources;

using ResourcesLibrary;

 

private void GetResources_Click(object sender, RoutedEventArgs e)

{

    //新建一个ResourceLoader类的对象resourceLoader

    var resourceLoader = new ResourceLoader("ResourcesLibrary/Resources");

    //新建一个LocalizeResourcesLibrary类的对象

    var localizeResourcesLibrary = new LocalizeResourcesLibrary();

    GetResourcesFromProject.Text = "引用方式获取类库中的资源:" + resourceLoader.GetString("ClassLibraryResources");

    GetResourcesFromLibrary.Text = "直接获取类库中的资源:" + localizeResourcesLibrary.LibraryResources;

}

在GetResources_Click方法中,首先以ResourcesLibrary类库中资源文件的所在路径“ResourcesLibrary/Resources”作为参数新建一个ResourceLoader类的对象resourceLoader,接着又新建了一个LocalizeResourcesLibrary类的对象localizeResourcesLibrary。

然后以ResourcesLibrary类库中的字符串资源名“ClassLibraryResources”作为resourceLoader对象GetString方法的参数,并将获取到的字符串资源的值赋给GetResourcesFromProject文本块的Text属性。

接下来调用localizeResourcesLibrary对象的LibraryResources属性,直接获取类库中字符串资源的值赋给GetResourcesFromLibrary文本块的Text属性,这样就完成了引用类库中的字符串资源值到当前项目中显示的功能。

当设置语言首选项为中文(简体)时,运行程序,单击“获取类库资源”按钮,将以引用方式和直接方式获取类库中简体中文的资源值,效果如图18-18所示。

当设置语言首选项为英语时,运行程序,单击“获取类库资源”按钮,将以引用方式和直接方式获取类库中的英语资源并显示,效果如图18-19所示。

图18-18 语言首选项为中文(简体)时引用类库资源

    

图18-19 语言首选项为英语时引用类库资源

至此,在本节中所要讲述的资源引用相关知识就介绍完了。开发者可以根据需求在XAML元素中或在和后台代码中引用资源,也可以将资源分离到多个资源文件中或将资源存储到类库中,以便在不同场合使用。下一节将为读者讲述更改应用语言的相关知识点。

Windows Store App 全球化:引用类库资源的更多相关文章

  1. Windows Store App 全球化:引用分离资源文件中的资源

    大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...

  2. Windows Store App 全球化:在后台代码中引用字符串资源

    上文提到了引用字符串资源具有两种方式,分别是在XAML元素中和在后台代码中引用资源文件中的字符串资源.在第一小节已经介绍了如何在XAML元素中引用字符串资源,本小节将讲解在后台代码中引用字符串资源的相 ...

  3. Windows Store App 全球化 资源匹配规则

    上面几个小节通过示例介绍了如何引用资源以及设置应用语言来显示不同语言的信息,这些示例都只是添加了简体中文和英语两种语言来显示资源,而在一些复杂的应用程序中,字符串资源可能会被定义成多种语言,文件资源也 ...

  4. Windows Store App 全球化:在XAML元素中引用文件资源

    上一小节讲解了如何在XAML元素中使用x:Uid属性引用资源文件中的字符串资源,通过改变语言首选项显示不同的运行结果.如果把字符串资源变成文件资源,就不能使用x:Uid属性来引用这些文件资源.本小节将 ...

  5. Windows Store App 全球化:在XAML元素中引用字符串资源

    在应用程序中可以通过XAML元素和后台代码两种方式引用资源文件中的字符串资源.本小节先讲述如何在XAML元素中引用字符串资源的相关知识点. 在XAML元素中可以通过使用x:Uid属性来引用资源文件中的 ...

  6. Windows Store App 全球化:运行时响应语言变更

    在应用程序运行过程中,系统的语言.像素.对比度等系统设置可能会发生改变,应用程序应根据系统环境的改变及时做出适当的响应.为了解决这样的问题,可以在应用程序中为系统状态更改事件注册事件处理方法,当语言. ...

  7. Windows Store App 全球化 设置指定页面的语言

    上一小节介绍了通过在应用程序中添加语言设置选项来改变整个应用显示信息的语言,而有时用户只想对应用中某一页面信息的语言进行调整,这时就不能使用上一小节所讲述的知识来对应用进行设置.下面将通过一个示例介绍 ...

  8. Windows Store App 全球化:应用中设置语言选项

    当开发者将开发的应用上传到Windows应用商店以后,使用Windows 8系统的用户可能会看到并下载这些应用,而这些用户所在的区域或者所使用的语言可能都不相同,如果他们在使用应用程序时希望改变应用显 ...

  9. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

随机推荐

  1. sharepoint 增删改查

    前端提交 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MeetingOneW ...

  2. 基于Apache+php+mysql的许愿墙网站的搭建create database xyq; //创建xyq数据库

    1.准备CentOS7与CentOS5的基础配置 2.在两台虚拟机中配置yum. 3.在CentOS7中安装httpd与php与php-mysql PS:截图时已安装 CentOS7 关闭防火墙与se ...

  3. Arduino 极速入门系列 - 光控灯(1)- 关于理论和 LED 那些事

    点个 LED 闪亮好像太单调,这次来个光控 LED 灯.这个其实不需要 Arduino 也能做,这次只是用来演示一下 PWM 在 Arduino 里面的做法.PWM 原理后面会解释.这次用充电宝提供 ...

  4. Java生成随机验证码

    package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  5. T-SQL编程练习(带注释)

    use test; GO /*创建自定义函数的格式: * create function 函数名(参数 数据类型) * returns 返回数据类型 as * begin * 代码 * end */ ...

  6. 使用spring aspect控制自定义注解

    自定义注解:这里是一个处理异常的注解,当调用方法发生异常时,返回异常信息 /** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ ...

  7. 谈谈Memcached与Redis

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...

  8. DuiLib 源码分析之解析xml类CMarkup & CMarkupNode cpp文件

    时隔5个月才有时间接着写未完成的实现部分,也是惭愧呀 选几个关机的函数来解析,一些get方法就忽略掉吧 CMarkupNode 与 CMarkUp 互为友元类,CMarkUp 实现解析,CMarkup ...

  9. Maven将依赖的所有jar包打成一个jar

    有些特殊情况下,需要将多个jar包打包成一个jar文件.如果使用maven可以加入如下插件: <build> <plugins> <plugin> <arti ...

  10. C语言程序设计进阶 第1周编程题

    第1周编程题 查看帮助 返回 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数 ...