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

时间:2011-10-18 07:18:42

标签: c# wpf xaml resources localization

我有一个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程序集中。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

您可以做的是让xaml元素一个x:name手动将代码背后的值设置为新值:

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