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

  • 相关阅读:
    《大道至简》第一章 编程的精义
    java课堂练习7
    Java课后练习6
    Java课后练习5
    Java课后练习4
    Java课后练习3
    课堂练习
    求和程序实验报告
    大道至简第二章读后感
    课堂作业例子
  • 原文地址:https://www.cnblogs.com/finehappy/p/4222653.html
Copyright © 2020-2023  润新知