在尝试使用货币值格式化字符串时,我注意到 WPF 显示它的方式有所不同。
在XAML
中格式化decimal
值时,WPF 将其显示为5,99 €
。
<TextBlock Text="{Binding Total, StringFormat={}{0:C}}"/>
return 5.99m;
当我在代码隐藏中格式化时,它显示为 € 5,99
。
<TextBlock Text="{Binding TotalString}"/>
return string.Format("{0:C}", 5.99m);
这是一个错误吗?
我有 Windows 10,目标 .NET 版本是 4.5.2。
最佳答案
设置绑定(bind)的 StringFormat
时,WPF 不使用 CultureInfo.CurrentCulture
,而是默认使用 en-US
,或者您通过设置元素(或其父元素)的 Language
属性指定的值。参见 this question了解更多详情。
另一方面,string.Format
确实使用了 CultureInfo.CurrentCulture
。用户可以配置它在格式化货币方面的确切行为。
例如,货币模式由注册表值 HKEY_CURRENT_USER\Control Panel\International\iCurrency
控制,可以在控制面板中设置(抱歉,这是德语):
因此,您可能只需更改该设置即可实现从 StringFormat 获得的格式化行为。
关于c# - 显示货币的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201102/