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

WPF StringFormat={0:C}显示为美元,wpf,binding,currency,regional,string-formatting,Wpf,Binding,Currency,Regional,String Formatting,为什么这行代码 <TextBlock Text="{Binding Net, StringFormat=c}"/> 当所有“我的地区设置”设置为“英国”时,将结果输出为$xx.xx。我希望它将其输出为xx.xx英镑。有什么想法吗?我尝试了stringformat的不同变体,包括stringformat={}{0:C},但仍然得到相同的结果 感谢您的关注。我不确定这是否已在.NET 4中修复,但WPF在呈现货币或日期等内容时从未采用当前文化。我认为这是一个巨大的疏忽,但谢天谢地,

为什么这行代码

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

当所有“我的地区设置”设置为“英国”时,将结果输出为$xx.xx。我希望它将其输出为xx.xx英镑。有什么想法吗?我尝试了stringformat的不同变体,包括stringformat={}{0:C},但仍然得到相同的结果


感谢您的关注。

我不确定这是否已在.NET 4中修复,但WPF在呈现货币或日期等内容时从未采用当前文化。我认为这是一个巨大的疏忽,但谢天谢地,很容易纠正。

在应用程序类中:

protected override void OnStartup(StartupEventArgs e)
{
    FrameworkElement.LanguageProperty.OverrideMetadata(
        typeof(FrameworkElement),
        new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(
            CultureInfo.CurrentCulture.IetfLanguageTag)));
    base.OnStartup(e);
 }
有关更多信息,请参阅。

什么对我有效:
1) 在app.xaml中重写OnStartup()并添加-
System.Threading.Thread.CurrentThread.CurrentUICulture=new CultureInfo(“et EE”)

2) 在XAML@Window level-
xmlns:sysglb=“clr namespace:System.Globalization;assembly=mscorlib”中定义

3) 在XAML中-

正确地拾取任何自定义区域设置。虽然我在第一步中使用的是手动创建的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">


Perfect,我花了一个小时试图找到一个解决方案,你在5分钟内就解决了,谢谢。事实上,根据微软的说法,这不是一个bug,而是一个功能。。。我会说,这是一个非常奇怪的功能,但知道这在未来的版本中不太可能“修复”可能会很好。但这不会带来对区域设置的自定义更改(即,我使用德语,但使用的是一种合理的日期格式[ISO 8601])。还有解决方法吗?在我的例子中,我没有在“OnStartUp”事件中使用它。只要把它放在我的“故障窗口”加载之前就足够了。谢谢,很好的提示。感谢这确实解决了自定义设置问题。对于步骤1,我使用“=newCultureInfo(CultureInfo.CurrentCulture.IetfLanguageTag)”而不是硬编码。非常好,谢谢。微软真的应该解决这个问题。当你在一个窗口中做原型时,这绝对是最快的方法!救生员,我爱你。要在XAML中显示带逗号的欧元符号和圆点(意大利文化):Language=“it”,然后在需要格式化DataGridTextColumn的情况下使用“€#,##0.00”格式化字符串,请在DataGridTextColumn中使用以下命令:Binding=“{Binding Path=PrezzoListino,ConverterCulture='it-it',StringFormat='\{0:€#,#0.00\}”。例如意大利文化、欧元货币和“PrezzoListino”字段。