我在这里看到了建议的解决方案:Access resx in application from Silverlight class library 它适用于资源本身。
我的问题略有不同:
public class ViewModelBaseExtended : ViewModelBase
{
private static LibResources resources = new LibResources();
public LibResources Resources { get { return resources; } }
}
<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返回不同的对象,因此我没有正确编译错误。