我有一个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程序集中。
答案 0 :(得分:2)
您必须从x:Static
值更改绑定源,并以某种方式通过提供值更改通知的属性公开本地化字符串。
答案 1 :(得分:0)
静态绑定似乎只是对字符串的绑定。换句话说,当您绑定到静态变量时,wpf看起来只是设置了相关属性的值,而忽略了绑定的静态元素(因为wpf“认为”该值永远不会改变。)
您可以做的是让xaml元素一个x:name手动将代码背后的值设置为新值:
//给定事件的代码: cancel.content = Properties.login.password;