首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个窗口负载都需要添加Resources.MergedDictionaries

每个窗口负载都需要添加Resources.MergedDictionaries
EN

Stack Overflow用户
提问于 2019-06-06 12:23:06
回答 1查看 78关注 0票数 0

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

代码语言:javascript
运行
复制
<Label x:Name="lblUsername" {DynamicResource username}" />

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

代码语言:javascript
运行
复制
        //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);

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

代码语言:javascript
运行
复制
WinSettings win = new WinSettings() { Owner = Application.Current.Windows[0] };
win.Show();

为了使这个操作正常,我必须再次删除旧的lang,并在Resources.MergedDictionaries on 'Window_Loaded‘事件的新窗口中添加新的lang。

难道没有其他方法可以使语言在所有新窗口上复制一次吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 12:50:16

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

要获得整个应用程序一致的可视化外观,您应该更新Resources.MergedDictionaries对象上的Application

示例代码如下所示:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56477535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档