2017-02-01 14 views
0

実行時にユーザーが言語(現在のカルチャではありません!)を変更できるWPFアプリケーションで作業しています。 ので、私は私のWPFアプリはそのように、多言語作るためにテキストを追加するタイプのXAMLの複数のリソースディクショナリがありますWPF-ウィンドウとコントロールは、ウィンドウのリソースによって拘束されているC#でリソース辞書(XAML)から値を取得する方法

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib" 
        xmlns:local="clr-namespace:Validation_DataAnnotations2.Resources"> 
    <system:String x:Key="firstname">First name</system:String> 
    <system:String x:Key="lastname">Last name</system:String> 
    <system:String x:Key="mainwindowtitle">Validation with DataAnnotations</system:String> 
    <system:String x:Key="german_language">German</system:String> 
    <system:String x:Key="english_language">English</system:String> 
    <system:String x:Key="insert_first_name">The first name has to be inserted</system:String> 
</ResourceDictionary> 

を。 しかし、私は検証のためにDataAnnotationsを使用しています。 私の最初の考えは、私のviewmodelの検証中に、キー "insert_first_name"にテキストを取得することでした。 だから私は、これを使用することによって、それを取得しようとしました:

System.Windows.Application.Current.Resources.FindName("insert_first_name") 

しかし、私は、メソッドFindName指定を使用する場合、私はnullを取得します。

と私は

System.Windows.Application.Current.Resources.Contains("insert_first_name") 

をしようとしたとき、私はキーが存在することを意味する、 "真" を取得。

キーに値を取得するにはどうすればよいですか?ここに示すように、アプリのリソースディクショナリを取得するためにApplication.Current.Resourcesを使用して、コードからアプリ全体のリソースをルックアップするために

protected void ValidateModel() 
{ 
    validationErrors.Clear(); 
    ICollection<ValidationResult> validationResults = new List<ValidationResult>(); 
    ValidationContext validationContext = new ValidationContext(personmodel, null, null); 
    if (!Validator.TryValidateObject(personmodel, validationContext, validationResults, true)) 
    { 
     foreach (ValidationResult validationResult in validationResults) 
     { 
      string property = validationResult.MemberNames.ElementAt(0); 
      if (validationErrors.ContainsKey(property)) 
      { 
       validationErrors[property].Add(validationResult.ErrorMessage); 
      } 
      else 
      { 
       validationErrors.Add(property, new List<string> { validationResult.ErrorMessage }); 
       if (validationResult.ErrorMessage == "insert_first_name") 
       { 
        var text = System.Windows.Application.Current.Resources.FindName("insert_first_name"); 
       } 
      } 
     } 
    } 

    // Raises the ErrorsChanged for all properties explicitly. 
    RaiseErrorsChanged("FirstName"); 
    RaiseErrorsChanged("LastName"); 
} 

答えて

5

string insertFirstName = Application.Current.Resources["insert_first_name"]; 

Source

+0

は、パラメータありがとう!あなたが正しいです。私は最後の2時間を探していて、何十件もの記事を読んでいました。 –

関連する問題