如何从C#中的资源字典(XAML)中获取值

我正在开发一个WPF应用程序,用户可以在运行时更改语言(而不是当前的文化!)。 所以我有多个XAML类型的资源词典,我添加了文本来制作我的WPF-app多语言:

 First name Last name Validation with DataAnnotations German English The first name has to be inserted  

WPF窗口和控件受窗口资源的约束。 但我正在使用DataAnnotations进行validation。 我的第一个想法是在我的viewmodel中validation时将文本传递给键“insert_first_name”。 所以我试图通过使用它来获得它:

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

但是当我使用FindName方法时,我得到null。

当我尝试

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

我得到“真实”,这意味着密钥存在。

我怎样才能获得钥匙的价值?

 protected void ValidateModel() { validationErrors.Clear(); ICollection validationResults = new List(); 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 { 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"); } 

要从代码中查找应用程序范围的资源,请使用Application.Current.Resources获取应用程序的资源字典,如下所示:

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

资源