如何在 WPF 窗口中重新加载所有本地化字符串?

Posted

技术标签:

【中文标题】如何在 WPF 窗口中重新加载所有本地化字符串?【英文标题】:how to reload all localized string in a WPF window? 【发布时间】:2011-10-18 07:18:41 【问题描述】:

我有一个 WPF 窗口,许多标签都使用本地化字符串。例如:

<Window x:Class="CoHOLauncher.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:s="clr-namespace:System;assembly=mscorlib"
        xmlns:l="clr-namespace:MyNameSpace"
        xmlns:loc="clr-namespace:MyNameSpace.Localization">

<Label Grid.Column="0" Content="x:Static loc:Strings.MainWindowSize" HorizontalAlignment="Right"/>

Strings类的详细信息如下:

public class Strings 
        private static global::System.Globalization.CultureInfo resourceCulture;
        public static global::System.Resources.ResourceManager ResourceManager 
            get 
                if (object.ReferenceEquals(resourceMan, null)) 
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MyNameSpace.Localization.Strings", typeof(Strings).Assembly);
                    resourceMan = temp;
                
                return resourceMan;
            
        

    public static global::System.Globalization.CultureInfo Culture 
        get 
            return resourceCulture;
        
        set 
            resourceCulture = value;
        
    

        public static string MainWindowSize 
            get 
                return ResourceManager.GetString("MainWindowSize", resourceCulture);
            
        

如果我在运行时更改了 Strings.Culture,如何强制 WPF 重新加载所有字符串?

我将所有字符串存储在本地化附属 DLL 程序集中,它们是从本地化资源文件生成的。

【问题讨论】:

【参考方案1】:

您必须从 x:Static 值更改绑定源,并通过提供值更改通知的属性以某种方式公开本地化字符串。

【讨论】:

【参考方案2】:

静态绑定似乎只是对字符串的绑定。换句话说,看起来,当您绑定到静态变量时,wpf 只是设置相关属性的值而忘记绑定静态元素(因为 wpf“认为”该值永远不会改变。)

您可以做的是让 xaml 元素 a x:name 手动将代码隐藏中的值设置为新值:

// 给定事件的代码: cancel.content = Properties.login.password;

【讨论】:

以上是关于如何在 WPF 窗口中重新加载所有本地化字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断WPF下窗口加载完成了

如何在 WPF 窗口上加载 Xaml 文件?

什么工具可以获得WPF开发的App的一个页面的所有字符.

如何在 WPF 中显示窗口而不丢失控件?

这样的窗口如何做(WPF项目)

如何在wpf窗口加载中选中xceedsoftware.checkboxlist控件中的一些项目。