周围的工作...
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
...曾经工作到现在(这里提到: StringFormat Localization issues in wpf )。
相反,直到我将我的应用程序从 3.5SP1 移植到 4.0 之前,它一直在工作。但是现在在 4.0 中它再次停止工作。有人经历过吗?
编辑:它现在甚至不能在 3.5SP1 中工作。我认为这与 4.0 的安装有关,因为以前这是有效的。
添加变通方法或删除它都不起作用。我什至尝试添加...
CultureInfo.CurrentCulture.ClearCachedData();
this.Language = XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag);
至
Window
构造函数。这也没有奏效。
最佳答案
1. 确保您覆盖默认值 LanguageProperty
越早越好。应用程序的静态构造函数是最好的选择。这很重要,因为 BindingExpression
缓存此属性的值,之后不会出于性能原因重新评估它。
2. 你是什么CultureInfo.CurrentCulture
?你确定这是你希望看到的吗?
3. 覆盖 Language
如果您指定 xml:lang
,则属性元数据无效属性在树上的某个地方。例如。如果你说:
<StackPanel xml:lang="it">
<TextBlock Text="{Binding StringFormat=C}"/>
</StackPanel>
无论您在属性元数据中设置什么,您都将获得意大利货币。
4. 覆盖
Language
如果您指定 ConverterCulture
,则属性元数据无效具有约束力的属性(property)。例如。如果你说:<TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/>
无论您在属性元数据或 xml:lang
中设置什么,您都将获得日本货币属性。据我所知,这种行为在框架之间没有改变。
希望这可以帮助
关于WPF XAML StringFormat : Culture Workaround broken in C# 4. 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689771/