2017-10-13 7 views
0

これは非常に簡単な質問かもしれないので、私の申し訳ありません。WPFページ要素へのプロパティの継承

ここで私の問題は、C#を使って多言語のWPFアプリケーションを構築したいのですが、別のPage要素を同じ方法で継承させる方法がわかりませんから、MainWindowを別の言語に翻訳します。アプリは完了しました。私はただ英語(私の母国語はスペイン語)に翻訳しています。 私はそれを翻訳するのにResource filesを使用しています。言語翻訳のための

コード:今すぐ

private void Languages_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
//This is the combobox in which you select the language to display the app in 
     Set_Language();    
    } 

//This is the method to invoke the Resource Manager and all the stuff from the resource file.  
private void Set_Language() 
    { 
     if (!boolInit) 
     { 
      strLanguage = "LeitProjekteV2._0.Languages." + ((ComboBoxItem)LanguageSel.SelectedItem).Name.ToString(); 
      ResourceManager LocRm = new ResourceManager(strLanguage, typeof(MainWindow).Assembly); 
      //Menu buttons 
      lblMenu.Content = LocRm.GetString("strMainMenu"); //The names inside the "" are the names of the resource in the Resource file which, depending on the language selected(Spanish, English and German) 
//Change the text of whatever I choose; in this case, a Label named 'lblMenu' 
      MapButt.Content = LocRm.GetString("strMapButt"); 
      BuscButt.Content = LocRm.GetString("strBusButt"); 
      AgeButt.Content = LocRm.GetString("strAgeButt"); 
      ComButt.Content = LocRm.GetString("strComButt"); 
      InfButt.Content = LocRm.GetString("strInfButt"); 
      LoginButt.Header = LocRm.GetString("strLoginButt"); 
      RegisterButt.Header = LocRm.GetString("strRegisterButt"); 
      ContacButt.Header = LocRm.GetString("strContacButt"); 
      MasButt.Header = LocRm.GetString("strMoreButt"); 

//Here go the names of everything the Pages contain that I want to translate, just like above 
//Have no idea how to inherit this method to all the pages 
     } 
    } 

あなたはbutton「地図」、Frameをクリックするように、私は、同じMainWindow.xamlに埋め込まれpagesいくつかを持っていることが名前のPageにコンテンツによる変更Map.xamlなど、他のボタンについても同様です。 しかし、どうすればそれらをPagesも翻訳できますか?

Set_Language()メソッドが正しいResource Fileを選択するためにComboboxの文字列値を取るので、それは私の問題を排除するにもかかわらず、私は、私が持っているすべてのPageのための1つのコンボボックスを作成する必要はありません。

助けが必要ですか?恐ろしいことを聞いて申し訳ありませんが、私はまだここでヒントを得ています。

ありがとうございました。以下

答えて

0

使用:あなたのウィンドウクラスに

var wnd = Window.GetWindow(this); //get current window 

キャスト、それをしては

は、現在のウィンドウ

あなたを見つけることによってプロパティを取得するためにあなたのページを使用して、パブリックプロパティとして使用する言語を公開上記を行う親ページクラスを作成し、すべてのページを継承してコードを繰り返さないようにしてください。

0

難易度がわかりますあなたが直面しているのは、共有のメインウィンドウとフレームにホストされているページにまたがるコンボボックスへの道を見つけることができないということです。

アプリケーション全体からアクセスできるグローバル変数を設定することができます。アプリケーション設定には適切な場所があります。次に、Comboboxで選択すると、選択した値がその変数に更新されます。

フレームにロードするときに、各ページのSet_Language()メソッドを呼び出します。各ページのSet_Language()メソッドでは、アプリケーション設定に格納されている変数に何が設定されているかを照会できます。

すぐに解決したい場合は、選択した言語を保持する静的クラスも作成しても問題ありません。

static class UserSelections 
{ 
    public static string Language { get; set; } 
} 
+0

これは本当に有望に見えますが、私が戻ったときに間違いなく試してみましょう。ありがとう! –

関連する問題