使用XAML从数据库支持WPF多语言
本文关键字:WPF 语言 支持 数据库 XAML 使用 | 更新日期: 2023-09-27 17:50:31
我正在尝试扩展我的WPF应用程序,以便从数据库中获得多语言支持。
我的方法将使用ResourceKeys来标识每个控件的内容。创建MVVM只需要更改属性,使用资源和所选语言查询数据库,如下所示:
public string Example
{
get
{
if (SelectedLanguage == null)
return string.Empty;
return ControlMapping.getKey("MainWindow_TxtBoxExample", SelectedLanguage.LanguageID);
}
}
为了使绑定工作,我设置了一个转换器,该转换器将获取密钥并从DB中选择适当的值。
public class LanguageSupport : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ControlMapping.getKey(value.ToString(), SelectedLanguage.LanguageID);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在窗口中,我创建了一个静态资源来访问转换器。
<Window.Resources>
<LangSupport:LanguageSupport x:Key="ls"/>
</Window.Resources>
不幸的是,这是我被卡住了…
我猜转换器不是正确的方式去填充各种控件的内容。
对于您所给予的任何帮助,我提前表示感谢。
我包含了一个对mscorlib的引用,以便访问String类。
xmlns:sys="clr-namespace:System;assembly=mscorlib"
然后我定义了一个资源,我可以用它来分配给一个控件。
<Window.Resources>
<LangSupport:LanguageSupport x:Key="ls"/>
<sys:String x:Key="hardccodedstring">MainWindow.hardcodedstring</sys:String>
</Window.Resources>
然后在控件本身中更改绑定以使用字符串作为converterparameter。
<Label Name="ex3" Content="{Binding Converter={StaticResource ls}, ConverterParameter={StaticResource hardccodedstring}}"/>
转换器本身也需要更改以使用此参数,而不是值。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter == null)
return string.Empty;
return ControlMapping.getKey(parameter.ToString(), SelectedLanguage.LanguageID);
}