我在这里看到了建议的解决方案:从 Silverlight 类库访问应用程序中的 resx, 它适用于资源本身。
我的问题略有不同:
- 我有 2 个使用相同库的应用程序。它们是本地化的,所以我有一个资源文件夹,在应用程序的文件夹中有 AppResource.resx、AppResource.it-IT.resx 文件
- 我有一个包含 XAML 文件和代码的库。它是本地化的,所以我有一个资源文件夹,在应用程序的文件夹中有文件 LibResource.resx、LibResource.it-IT.resx
- 该应用程序正在使用 MvvmLight 库。正如建议的那样,我在 ViewModelBaseExtended 中扩展了 ViewModelBase 类,添加了以下字段:
public class ViewModelBaseExtended : ViewModelBase
{
private static LibResources resources = new LibResources();
public LibResources Resources { get { return resources; } }
}
- 库中的 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 返回不同的对象。