06、应用程序资源(ApplicationResources 上)

 

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) 中资源


 

posted @ 2012-09-15 17:36  博琼  阅读(1620)  评论(0编辑  收藏  举报