工作......
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
构造函数。这也行不通。
答案 0 :(得分:0)
1。请确保尽早覆盖LanguageProperty
的默认值。 App的静态构造函数是最好的选择。这很重要,因为BindingExpression
会缓存此属性的值,并且出于性能原因不会在之后重新评估它。
2。你的CultureInfo.CurrentCulture
是什么?你确定它是你期望看到的吗?
3。如果您在树中的某处指定Language
属性,则覆盖xml:lang
属性元数据无效。例如。如果你说:
<StackPanel xml:lang="it">
<TextBlock Text="{Binding StringFormat=C}"/>
</StackPanel>
无论您在属性元数据中设置什么,都可以获得意大利货币。
4. 如果在绑定中指定Language
属性,则覆盖ConverterCulture
属性元数据无效。例如。如果您说:<TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/>
,无论您在属性元数据或xml:lang
属性中设置了什么,都可以获得日元货币。
据我所知,这种行为在框架之间没有改变。
希望这有帮助