How to get the value from a resource dictionary (XAML) in C#
我正在开发一种WPF应用程序,用户可以在其中运行时更改语言(不是当前的区域性!)。
因此,我有多个XAML类型的资源字典,在其中添加了一些文本,以使WPF应用程序可以使用多种语言:
1 2 3 4 5 6 7 8 9 10 11 | <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> |
WPF窗口和控件受窗口资源的约束。
但是我正在使用DataAnnotations进行验证。
我的第一个想法是在视图模型中进行验证时将文本输入键" insert_first_name"。
所以我试图通过使用它来获得它:
1 | System.Windows.Application.Current.Resources.FindName("insert_first_name") |
但是,当我使用FindName方法时,我得到了null。
当我尝试
1 | System.Windows.Application.Current.Resources.Contains("insert_first_name") |
我得到" true",这意味着密钥存在。
我如何获得关键的价值?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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"); } |
要从代码中查找应用程序范围内的资源,请使用Application.Current.Resources获取应用程序的资源字典,如下所示:
1 | string insertFirstName = Application.Current.Resources["insert_first_name"]; |
资源