WPF XAML StringFormat:C#4.0中的文化解决方法?

时间:2010-04-22 09:57:05

标签: wpf c#-4.0 string-formatting

工作......

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 个答案:

答案 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属性中设置了什么,都可以获得日元货币。

据我所知,这种行为在框架之间没有改变。

希望这有帮助