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 にアクセスするにはどうすればよいですか? ライブラリはアプリケーション間で共有され、名前空間は設計時に定義されておらず、実行時に変更されるため、名前空間.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