WPF StringFormat = {0:C}显示为美元

为什么这行代码

<TextBlock Text="{Binding Net, StringFormat=c}"/> 

当所有区域设置都设置为英国时,将结果输出为$ xx.xx。 我希望它输出为£xx​​.xx。 有任何想法吗? 我已经尝试了stringformat的不同变体,包括StringFormat = {} {0:C},但仍然得到相同的结果。

感谢您的期待。

我不确定这是否已经在.NET 4中修复,但是WPF在渲染像货币或date之类的东西时从来没有拿起过当前的文化。 这是我认为的一个大规模的疏忽,但幸好很容易纠正。

在你的App类中:

 protected override void OnStartup(StartupEventArgs e) { FrameworkElement.LanguageProperty.OverrideMetadata( typeof(FrameworkElement), new FrameworkPropertyMetadata( XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag))); base.OnStartup(e); } 

看到这个优秀的职位了解更多信息。

例如,我在主窗口中执行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"> 

什么对我有用:
1)在app.xaml重写OnStartup()并添加 – System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");

2)定义在XAML @ Window级别 – xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"

3)在XAML中 – <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />

正确地拿起任何自定义区域设置。 尽pipe我在第一步中使用手动创build的CultureInfo ,但我确定可以传入一个静态types – 例如。 System.Globalization.CultureInfo.CurrentCulture (虽然我还没有testing过)