2017-01-31 13 views
0

多言語対応のWPFアプリケーションで作業しています。 私はこのarticleの手順に従い、私のプロジェクトにいくつかのリソース辞書を追加しました。 はその後、私は私が呼んでいるれ、次のような方法でウィンドウにこれらdictionarioesの1を追加 - テスト目的のために - ウィンドウのコンストラクタで:WPFでデザイン時に多言語のリソーステキストを表示する方法

private void SetLanguageDictionary() 
    { 
     ResourceDictionary dict = new ResourceDictionary(); 

     switch (Thread.CurrentThread.CurrentCulture.ToString()) 
     { 
      case "en-US": 
      case "en-GB": 
       dict.Source = new Uri("Resources\\StringResources_en-US.xaml", 
           UriKind.Relative); 
       break; 
      case "de-DE": 
       dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
       break; 
      default: 
       dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
       break; 
     } 

     Resources.MergedDictionaries.Add(dict); 
    } 

最後に私は私のラベル内のリソースを実装しました

<Label Grid.Row="0" 
      Grid.Column="0" 
      Margin="5" 
      Content="{DynamicResource firstname}"></Label> 

私のPC上の現在のカルチャーが "en-US"の場合、内容は「名」になります。 「de-DE」(ドイツ語)「​​Vorname」の場合。

実行時に正常に動作しますが、デザイン時にテキストが表示されません。

私は何をすればよいですか?

+0

、私は{CommonDate、ソース= {StaticResourceリソースをバインド」=コンテンツを使用します}} "Resourcesはresources.resxです – 0x4f3759df

+0

これは依存関係注入の仕事のようです。私はNuGetのMVVM Lightツールキットを使用しています。デフォルトでは、バインドするデータは2つのデータサービス(リポジトリ)のいずれかから来ます。デザインのダミーデータを扱うデザインデータサービスと、ランタイム。 viewmodelでは、バインディングするオブジェクトをdataserviceから取得しますが、どのdataserviceが使用されているかに応じて異なるオブジェクトを取得します(デザインモードかどうかによって異なります)。 https://mvvmlight.codeplex.com/ –

答えて

0

私はそれを見つけました。

私はWindow.ResourcesでResourceDictionaryを実装する必要がありました。 これを行うには、いくつかのタグを追加する必要があります( "ResourceDictionary"、 "ResourceDictionary.MergedDictionaries")。

スタイルが定義されている場合は、以下のように、タグ「ResourceDictionary」の内側に移動する必要があります。

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/StringResources_en-US.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style x:Key="style1"> 
      [...] 
     </Style> 

     [...] 
    </ResourceDictionary> 
</Window.Resources> 

次に、ダイナミックリソースとしてバインドされたコントロール内のxamlファイルからテキストを見ることができます。 そして、それは動的なリソースとして使用されているので、それはコードビハインドで上書きすることができます:私はあなたがそれを苦労してやっているかもしれないと思う

 ResourceDictionary dict = new ResourceDictionary(); 
     dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
     Resources.MergedDictionaries.Add(dict); 
関連する問題