48

为什么这行代码

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

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

感谢您的关注。

4

3 回答 3

75

我不确定这是否已在 .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);
 }

有关更多信息,请参阅这篇出色的帖子

于 2010-05-04T11:03:16.390 回答
36

我在主窗口中执行 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">
于 2013-09-23T16:29:26.853 回答
20

什么对我有用:
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}}" />

会正确选择任何自定义区域设置。尽管我在第一步中使用了手动创建的CultureInfo ,但我确信可以传入其中一个静态类型 - 例如。System.Globalization.CultureInfo.CurrentCulture(虽然我还没有测试过......)

于 2012-08-24T19:21:25.063 回答