【发布时间】: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 helpful。
FrameworkElement.LanguageProperty.OverrideMetadata(...)是我所做的简短测试中唯一影响 UI 的部分,您必须刷新所有绑定 (OnPropertyChanged("")) 才能更新 UI,如果您执行两次它会引发异常,对我来说是仅适用于"de-DE"等已知文化。 -
@DavidG “标签不带数字”实际上是不正确的。 WPF Label 类的 Content 属性是 object 类型,接受任何类型的值,尤其是数值。
标签: c# .net wpf currentculture