在应用程序中可以通过XAML元素和后台代码两种方式引用资源文件中的字符串资源。本小节先讲述如何在XAML元素中引用字符串资源的相关知识点。
在XAML元素中可以通过使用x:Uid属性来引用资源文件中的字符串资源,这些字符串资源存储在资源文件中,下面介绍如何在项目中新建资源文件、添加字符串资源以及在XAML元素中通过x:Uid属性引用资源文件中的字符串资源。
在Visual Studio 2012中新建一个Windows应用商店的空白应用程序项目,并命名为StringResourcesInXaml,在项目中新建一个名为“Strings”的文件夹,在“Strings”文件夹下添加一个子文件夹,命名为zh-CN,用于存储语言为中文的资源文件。在zh-CN文件夹中添加资源文件的操作方法是:右键单击“zh-CN”文件夹à添加à新建项,在“添加新项”窗口中选择“资源文件(.resw)”,命名为Resources,然后单击“添加”按钮。打开此资源文件在其中添加如图18-1所示的两个资源。
图18-1在Strings/zh-CN/Resources.resw资源文件中添加的两个资源
完成上述操作后就可以在控件中使用x:Uid属性来引用字符串资源。在MainPage.xaml文件的Grid元素中添加一个TextBlock控件,使用x:Uid属性引用StringResources.Text资源,代码如下所示:
<TextBlock Text="" x:Uid="StringResources" Margin="500,230,660,440" FontSize="25"/>
在上面的代码中,x:Uid属性将检索Strings/zh-CN/Resources.resw资源文件,把StringResources.Text资源的值“你好世界”赋给TextBlock控件的Text属性。在XAML元素中引用资源的资源名称是以“资源名.属性名”的形式在资源文件中写出的,在引用资源时使用x:Uid="资源名"检索资源,使用相应的属性进行接收资源值。这也是为什么图18-1所示的第一个资源是以.Text结尾,而在TextBlock控件中使用Text属性进行接收资源值。在TextBlock控件中,删除Text属性也可以达到一样的效果。这时运行程序,屏幕将显示“你好世界”,效果参见图18-3。
还可以在“Strings”文件夹下添加一个名为“en-US”的文件夹用于存储语言为英语的资源文件。在“en-US”文件夹下新建一个名为“Resources.resw”的资源文件,打开资源文件添加如图18-2所示的资源。
图18-2 在Strings/en-US/Resources.resw资源文件中添加的两个资源
这时更改系统语言首选项,TextBlock控件的Text属性值将根据系统语言首选项的更改而显示不同语言的文本信息。
更改语言首选项的操作步骤是:打开控制面板,选择“时钟、语言和区域”à“语言”。将希望设置为首选项的语言上移到语言列表的第一个位置。如果列表中没有需要使用的语言,可以单击“添加语言”按钮来将这些语言添加到语言列表中,并上移到列表顶端。
在本示例中使用的是中文(简体)和英语两种语言,如果语言列表的顶端不是这两者之一,则应用运行时将采用语言列表中下一种应用支持的语言显示文本信息。如果语言列表中没有英语或中文(简体),则应用会采用本身默认支持的语言来显示文本信息,默认语言写在项目文件的DefaultLanguage属性中,项目文件在项目所在文件夹中,它以.csproj或.vbproj为后缀名。可以用打开记事本的方式打开项目文件,查看并设置DefaultLanguage属性。
若要运行程序查看TextBlock控件显示两种不同语言的文本信息,分别使中文(简体)和英语作为语言首选项。当语言首选项为中文(简体)时,运行程序,在界面上会显示“你好世界”,效果如图18-3所示。当语言首选项为英语时,运行程序,在界面上会显示“Hello World”,效果如图18-4所示。
图18-3 首选语言项为中文(简体)时的效果 图18-4 首选语言项为英语时的效果
本小节讲解了如何在XAML元素中使用x:Uid属性引用资源文件中的字符串资源,下一小节将讲述如何在XAML元素中引用文件资源。