为什么这行代码WPF的StringFormat = {0:C}显示为美元
<TextBlock Text="{Binding Net, StringFormat=c}"/>
输出结果为$ XX.XX当我所有的区域设置被设置为英国。我希望它输出为£xx.xx。有任何想法吗?我尝试过不同的stringformat变体,包括StringFormat = {} {0:C},但仍然得到相同的结果。
感谢您的期待。
为什么这行代码WPF的StringFormat = {0:C}显示为美元
<TextBlock Text="{Binding Net, StringFormat=c}"/>
输出结果为$ XX.XX当我所有的区域设置被设置为英国。我希望它输出为£xx.xx。有任何想法吗?我尝试过不同的stringformat变体,包括StringFormat = {} {0:C},但仍然得到相同的结果。
感谢您的期待。
我不确定这是否已在.NET 4中修复,但WPF在渲染像货币或日期之类的东西时从未接受过当前的文化。这是我认为是一个大规模的疏忽,但幸好很容易纠正。
在你的App类:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
更多信息请参见this excellent post。
什么对我的作品:
1)在App.xaml中覆盖OnStartup(),并添加 - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2)定义在XAML @窗位 - xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3)在XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
这正确拿起任何定制区域设置。虽然我在第一步中使用手动创建的CultureInfo,但我确定可以传入其中一种静态类型 - 例如。 System.Globalization.CultureInfo.CurrentCulture(我还没有经过测试......)
我在主窗口中做了Language =“en-GB”,例如
<Window x:Class="AllocateWPF.Vouchers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="692" Width="1000" Language="en-GB">
绝对是您在原型开发窗口时最快捷的方式! – Grim 2015-11-06 10:32:10
拯救生命,我爱你。要在XAML中显示逗号(意大利文化)的欧元符号和点intead:Language =“it-IT”,然后用“€#,## 0.00”格式化字符串 – 2016-01-29 17:45:59
完美,我花了一个小时试图找到解决方案,并在5分钟内解决了问题,谢谢。 – Coesy 2010-05-04 11:17:41
实际上,根据[MS Connect上的这个错误报告](https://connect.microsoft.com/VisualStudio/feedback/details/442569/wpf-binding-uses-the-wrong-currentculture-by-default),它不是一个错误,而是一个*功能*,因为MS的状态......很奇怪的*功能*,我会说,但它可能是很好的知道,这是不太可能“固定”在未来的版本。 – gehho 2010-05-04 13:21:09
尽管(虽然我使用德语,但具有健全的日期格式[ISO 8601]),但它不会选择区域设置的自定义更改。有没有解决方法呢? – Joey 2010-12-10 00:48:50