3

我在这里看到了建议的解决方案:从 Silverlight 类库访问应用程序中的 resx, 它适用于资源本身。

我的问题略有不同:

  1. 我有 2 个使用相同库的应用程序。它们是本地化的,所以我有一个资源文件夹,在应用程序的文件夹中有 AppResource.resx、AppResource.it-IT.resx 文件
  2. 我有一个包含 XAML 文件和代码的库。它是本地化的,所以我有一个资源文件夹,在应用程序的文件夹中有文件 LibResource.resx、LibResource.it-IT.resx
  3. 该应用程序正在使用 MvvmLight 库。正如建议的那样,我在 ViewModelBaseExtended 中扩展了 ViewModelBase 类,添加了以下字段:
public class ViewModelBaseExtended : ViewModelBase
{
    private static LibResources resources = new LibResources();
    public LibResources Resources { get { return resources; } }
}
  1. 库中的 XAML 能够正确访问本地化资源:
<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 因为库是在应用程序之间共享的,并且在设计时没有定义命名空间并且在运行时没有更改。

我有一个完整的项目准备好使用确切的配置进行测试,文件 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 返回不同的对象。

4

0 回答 0