Windows Store App 全球化:引用类库资源

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

新建一个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元素中或在和后台代码中引用资源,也可以将资源分离到多个资源文件中或将资源存储到类库中,以便在不同场合使用。下一节将为读者讲述更改应用语言的相关知识点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值