使用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>

不幸的是,这是我被卡住了…

我猜转换器不是正确的方式去填充各种控件的内容。

对于您所给予的任何帮助,我提前表示感谢。

使用XAML从数据库支持WPF多语言

我包含了一个对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);
    }