1、String Resources In XAML:
下面的 text 使用一个 x:Uid 的属性来引用一个字符串资源。这个 x:Uid 属性根据指定的标识符指导 XAML 转换器(parser)从资源管理系统中获取字符串资源。字符串资源在 资源文件( .resw)中被创建,并且被限制在名称例如为(e.g. en/)的文件夹 和 名称为(e.g. name.lang-fr-FR.png)的文件中。在 .resw 文件中的词目的格式类似为 :
[resourceidentifier].[attribute]
<TextBlock Style="{StaticResource BasicTextStyle}" x:Uid="WelcomeHeader" x:Name="Scenario1TextBlock" Text="Hello"
HorizontalAlignment="Left" FontSize="20" />
程序中资源文件的截图:
在 strings/en/Resources.resw 中 x:Uid 为 WelcomeHeader 的资源:
同样路径 ja 文件夹中的 Resources.resw 与之类似。
2、File Resoures In XAML:
图片和其它资源可以基于比例因子、高对比度模式下、用户语言和其它维度进行加载。所有在 XAML和代码中的文件资源都可以被虚拟化,从而可以最好的基于当前应用程序上下文进行利用。
注意,每一张图片的输出需要一个引用逻辑的图片(如 imgages/projecctor.png),但是可以通过类似 (imgages/en/projector.scale-100_contrast-standard.png) 的方式加载程序包中的物理图片。文件夹可以通过限制命名为(e.g. en-US),文件被命名为(e.g en-US/)/and(/or)/ filename 来提高可读性。
如果想看到不同的图片,安装下面的方法进行设置:
1)改变用户的首选语言, 控制面板 -> 时钟、语言、地区 -> 语言 -> 添加一个本应用程序支持的语言(英语,或者 日语) 。把新语言移动到列表的顶部。
2)通过 visual station 改变模拟器的缩放比例。
3)改变对比度,选择 PC Settings -> Ease of Access -> 选择 高对比度 “High Contrast”
<Image x:Name="Scenario2Image" Source="Images/projector.png" HorizontalAlignment="Left"
Height="80" Width="80" Stretch="UniformToFill" />
3、String Resource In Code:
可以通过使用 Windows.ApplicationModel.Resources.ResourceLoader() 方法,使用 C# 编程的方法获取程序中的资源。
ResourceLoader resourceLoader = new ResourceLoader(); //ResourceLoader : 提供对应用程序资源的简化访问,例如应用程序 UI 字符串。
//返回资源的最合适的字符串值,对当前正在运行的应用程序的默认上下文由资源标识符指定。
//resource: 要解决的资源的资源标识符。
this.Scenario3TextBlock.Text = resourceLoader.GetString("string1");
在 strings/en/Resources.resw 文件中的截图:
4、Resources in the AppX manifest:
附录清单(Appx Manifest)可能引用到字符串和文件资源。这允许应用程序能够提供多个变体(即语言、规模、对比等)的显示名称、商标或其他UI中指定的清单。字符串资源的标识符必须以 "ms-resource" (URI scheme name)作为前缀。文件引用应该简单地指逻辑文件。
打开并浏览 Page.appxmanifest file。
5、Additional Resource Files:
有时,维护单独的资源文件是有用的。虽然默认的资源文件是 resources.resw ,当从附加的文件中加载资源时,字符串标识符应该使用以"/"为开头的绝对路径的 URI 和 文件(例如 /errors/scenario8error 的示例从 errors.resw 文件中加载)。资源标识符(URIs)通常联系到 ms-resource:///resources/ ,这个代表本程序包中的 resource.resw 文件。其他包可以通过URI引用的主机名(如ms资源:/ / packagename /) 从而被引用。
var resourceLoader = new ResourceLoader("Errors"); // 构造函数的参数:新的资源加载程序用于非限定资源引用的资源映射的资源标识符。然后,它可以检索相对于这些引用的资源。 this.Scenario5TextBlock.Text = resourceLoader.GetString("InvalidOperation");
在应用程序中的路径:
Errors.resw 文件中的截图:
6、Class Library Resources:
在类库(.dll)文件中可以存放它们自己的资源。此外,应用程序可以从类库中获取资源。
1) 本例中,创建了 LocalizedNamesLibrary 类库:
在资源文件 Resources.resw 文件中添加键值对:
创建 LocalizedNamesLibrary 静态类,用来提供外界访问资源的方法:
public static class LocalizedNamesLibrary { static ResourceLoader resourceLoader = null; public static string LibraryName { get { String name; GetLibraryName("string1", out name); return name; } } private static void GetLibraryName(string resourceName, out string resourceValue) { if (resourceLoader == null) { resourceLoader = new ResourceLoader("AppResourceClassLibrary/Resources"); } resourceValue = resourceLoader.GetString(resourceName); } }
2)在示例中,添加对 1) 类库的引用,并且调用如下:
var resourceLoader = new ResourceLoader("AppResourceClassLibrary/Resources");
this.Scenario6TextBlock.Text = "Retrieved from app: " + resourceLoader.GetString("string1"); //当前应用的资源 this.Scenario6TextBlock2.Text = "Retrieved from class library: " + AppResourceClassLibrary.LocalizedNamesLibrary.LibraryName; // 访问类库 1) 中资源