【问题标题】:Setting CurrentUICulture does nothing设置 CurrentUICulture 什么都不做
【发布时间】:2019-10-19 00:51:45
【问题描述】:

我正在尝试更改 WPF 应用程序中的数字格式。我想要国际标准化格式(空格作为千​​位分隔符),以及“--”作为 NaN 符号。

我克隆了一个 CultureInfo 并设置了 NumberFormatInfo,然后在主窗口的构造函数中将其设置为 Thread.CurrentThread.CurrentCulture(我也在 WindowLoaded 中尝试过)。我还设置了 CultureInfo.DefaultThreadCurrentCulture 和 *CurrentUICulture 以获得良好的衡量标准。

但是没有任何效果。标签中的数字格式保持默认美国格式(逗号作为千位分隔符)。为什么应用对我设置的文化没有响应?

这是完整的代码,虽然我已经尝试了很多变体,所以我怀疑实际代码不是问题,但我误解了文化的运作方式:

        CultureInfo myNumberCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
        myNumberCulture.NumberFormat = new NumberFormatInfo
        {
            NaNSymbol = "--",
            NumberGroupSeparator = " ",
            PercentGroupSeparator = " ",
            CurrencyGroupSeparator = " ",
            NumberDecimalSeparator = ".",
            PercentDecimalSeparator = ".",
            CurrencyDecimalSeparator = "."
        };
        Thread.CurrentThread.CurrentCulture = myNumberCulture;
        CultureInfo.DefaultThreadCurrentCulture = myNumberCulture;

【问题讨论】:

  • 那么你是如何将文本添加到标签的?
  • @DavidG 它会有所不同,通常我正在设置内容。它被设置为数值,而不是字符串,所以标签应该自己格式化。
  • 最简单、最可靠的方法是应用字符串格式。这当然不是自动的。另一个可靠的替代方法是子类绑定stackoverflow.com/questions/5831455/…
  • This may be helpfulFrameworkElement.LanguageProperty.OverrideMetadata(...) 是我所做的简短测试中唯一影响 UI 的部分,您必须刷新所有绑定 (OnPropertyChanged("")) 才能更新 UI,如果您执行两次它会引发异常,对我来说是仅适用于 "de-DE" 等已知文化。
  • @DavidG “标签不带数字”实际上是不正确的。 WPF Label 类的 Content 属性是 object 类型,接受任何类型的值,尤其是数值。

标签: c# .net wpf currentculture


【解决方案1】:

关键似乎是标签在进行数字的内置格式时忽略了线程的文化。但是 ToString 没有。所以我的解决方案/解决方法是在将 ToString 设置为标签的内容之前显式调用该数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    相关资源
    最近更新 更多