実行時にユーザーが言語(現在のカルチャではありません!)を変更できる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");
}
は、パラメータありがとう!あなたが正しいです。私は最後の2時間を探していて、何十件もの記事を読んでいました。 –