每次加载窗口时都需要添加Resources.MergedDictionaries

时间:2019-06-06 12:23:06

标签: c# wpf

我最近完成了具有多语言支持的WPF应用程序。为了实现多语言,我为每种语言创建了资源字典,并在控件上使用了动态资源键,如下所示:

<Label x:Name="lblUsername" {DynamicResource username}" />

在应用程序启动时,我要求用户从下拉列表中选择所需的语言,并在选择后将相关字典添加到如下资源中:

        //remove old file
        foreach (ResourceDictionary langfile in Resources.MergedDictionaries)
        {
            if (langfile.Source.ToString().Contains("lang"))
            {
                Resources.MergedDictionaries.Remove(langfile);
                break;
            }
        }

        //add new file
        Resources.MergedDictionaries.Add(langfilename);

以上代码使用新选择的语言更新了窗口上的所有控件。但是,只要我使用下面的命令打开另一个窗口,控件就会再次使用默认语言(英语)。

WinSettings win = new WinSettings() { Owner = Application.Current.Windows[0] };
win.Show();

要使其正常工作,我必须再次删除旧的lang并将新的lang添加到新窗口的“ Window_Loaded”事件的Resources.MergedDictionaries中。

是否还有其他方法可以设置一次语言并将其复制到所有新窗口上?

1 个答案:

答案 0 :(得分:1)

当您在Resources.MergedDictionaries中更新Window时,它会更新该特定窗口/元素的样式。

要在整个应用程序中获得一致的外观,应在Resources.MergedDictionaries对象上更新Application

示例代码如下:

Application.Current.Resources.MergedDictionaries.Add(langfilename);

请参阅此MSDN页,以进一步阅读Resources对象上的Application属性。