从库中访问应用程序本地化资源(resx)

时间:2012-04-21 08:09:25

标签: windows-phone-7 c#-4.0 localization resources shared-libraries

我在这里看到了建议的解决方案:Access resx in application from Silverlight class library 它适用于资源本身。

我的问题略有不同:

  1. 我有2个使用相同库的应用。它们是本地化的所以我有一个资源文件夹,在应用程序的文件夹中有文件AppResource.resx,AppResource.it-IT.resx
  2. 我有一个包含XAML文件和代码的库。它是本地化的所以我有一个资源文件夹,在应用程序的文件夹中文件LibResource.resx,LibResource.it-IT.resx
  3. 该应用正在使用MvvmLight库。正如所建议的,我已经扩展了课程 ViewModelBaseExtended中的ViewModelBase添加字段:
  4. public class ViewModelBaseExtended : ViewModelBase
    {
        private static LibResources resources = new LibResources();
        public LibResources Resources { get { return resources; } }
    }
    
    1. 库中的XAML能够正确访问本地化资源:
    2. <phone:PhoneApplicationPage x:Class="PhoneClassLibrary1.MainPage"
                 DataContext="{Binding Main, Source={StaticResource Locator}}">
      
      <StackPanel x:Name="TitlePanel"
      Grid.Row="0"
      Margin="24,24,0,12">
                 <TextBlock x:Name="ApplicationTitle"
                      Text="{Binding Resources.AppName}"
                      Style="{StaticResource PhoneTextNormalStyle}" />
                 <TextBlock x:Name="PageTitle"
                      Text="{Binding Resources.LocalLib}"
                      Margin="-3,-8,0,0"
                      Style="{StaticResource PhoneTextTitle1Style}" />
      </StackPanel>
      

      我的问题是:如何从库中访问应用程序中的AppResources? 我无法直接引用它们Namespace.AppResources,因为库在应用程序之间共享,而Namespace未在设计时定义并在运行时更改。

      我有一个完整的项目准备好使用确切的配置,文件etxc进行测试..除了从库到应用程序级别的访问之外还有其他工作。

      应用我在开头提到的解决方案:

      private static AppResources _gResources;
      public AppResources gResources { set {_gResources = value;}  get { return _gResources; } }
      
      public ViewModelBaseExtended()
      {
          var assembly = Application.Current.GetType().Assembly;
          var ast = assembly.FullName;
          char[] delimit = new char[] { ',' };
          string[] parts = ast.Split(delimit);
      
          gResources = new System.Resources.ResourceManager(parts[0]+ ".AppResources", assembly);
      }
      

      由于gResources是AppResource(或LibResource)类,而ResourceManager返回不同的对象,因此我没有正确编译错误。

0 个答案:

没有答案