【问题标题】:WPF XAML StringFormat: Culture Workaround broken in C# 4.0?WPF XAML StringFormat:C# 4.0 中破坏的文化解决方法?
【发布时间】:2011-02-10 23:57:20
【问题描述】:

解决方法...

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 构造函数。这也没有用。

【问题讨论】:

  • 也许 MS 已经解决了这个问题。当您完全删除工作时会发生什么?代码是否按预期工作。
  • 我在问题中添加了信息。
  • 您在哪里覆盖了应用程序中的 LanguageProperty?在您的应用程序、窗口等中?

标签: wpf c#-4.0 string-formatting


【解决方案1】:

1. 确保尽早覆盖默认值LanguageProperty。 App 的静态构造函数是最好的选择。这一点很重要,因为BindingExpression 缓存了该属性的值,之后出于性能原因不会重新评估它。

2. 你的CultureInfo.CurrentCulture 是什么?你确定这是你希望看到的吗?

3. 如果您在树的上方某处指定xml:lang 属性,则覆盖Language 属性元数据无效。例如。如果你说:

<StackPanel xml:lang="it">
  <TextBlock Text="{Binding StringFormat=C}"/>
</StackPanel>

无论您在属性元数据中设置什么,您都将获得意大利货币。

4. 如果您在绑定中指定ConverterCulture 属性,则覆盖Language 属性元数据无效。例如。如果你说:&lt;TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/&gt;,无论你在属性元数据或xml:lang 属性中设置什么,你都会得到日元。

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 2018-04-03
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2017-01-10
    相关资源
    最近更新 更多