WPF StringFormat={0:C} 显示为美元
当我所有的区域设置都设置为英国时,为什么这行代码
<TextBlock Text="{Binding Net, StringFormat=c}"/>
输出结果为$xx.xx。我希望它输出为 £xx.xx。有什么想法吗?我尝试了字符串格式的不同变体,包括 StringFormat={}{0:C} 但仍然得到相同的结果。
感谢您的关注。
Why does this line of code
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Output the result as $xx.xx when all my regional settings are set to UK. I expect it to output it as £xx.xx. Any ideas? I have tried different variations of the stringformat including StringFormat={}{0:C} but still get the same result.
Thanks for looking.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我不确定这个问题是否已在 .NET 4 中得到修复,但 WPF 在呈现货币或日期等内容时从未采用当前文化。我认为这是一个巨大的疏忽,但幸运的是很容易纠正。
在您的应用程序类中:
请参阅 这篇优秀的文章 了解更多信息。
I'm not sure if this has been fixed in .NET 4, but WPF has never picked up the current culture when rendering things like currency or dates. It's something I consider a massive oversight, but thankfully is easily corrected.
In your App class:
See this excellent post for more information.
我在主窗口中执行 Language="en-GB" 例如
I do Language="en-GB" in the main window e.g.
什么对我有用:
1) 在 app.xaml 中覆盖 OnStartup() 并添加 -
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) 在 XAML @ 窗口级别中定义 - < code>xmlns:sysglb="clr-namespace:System.Globalization; assembly=mscorlib"
3) 在 XAML 中 -
此操作正确选取任何自定义区域设置。尽管我在第一步中使用手动创建的CultureInfo,但我确信可以传入其中一个静态类型 - 例如。 System.Globalization.CultureInfo.CurrentCulture(不过我还没有测试过......)
What works for me:
1) In app.xaml override OnStartup() and add -
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2) Define in XAML @ Window level -
xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3) In XAML -
<TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
This correctly picks up any custom regional settings. Although I'm using a manually created CultureInfo in the first step, I'm sure it's possible to pass in one of the static types - eg. System.Globalization.CultureInfo.CurrentCulture (I haven't tested it though...)