【问题标题】:WPF StringFormat={0:C} showing as dollarsWPF StringFormat={0:C} 显示为美元
【发布时间】:2011-02-15 09:59:04
【问题描述】:

为什么会出现这行代码

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

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

感谢收看。

【问题讨论】:

    标签: wpf binding currency regional string-formatting


    【解决方案1】:

    我不确定 .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

    【讨论】:

    • 完美,我花了一个小时试图找到解决方案,您在 5 分钟内解决了它,谢谢。
    • 实际上,根据this bug report at MS Connect 的说法,这不是一个错误,而是一个 feature 正如 MS 所说... 很奇怪 feature,我会说,但很高兴知道这在未来的版本中不太可能“修复”。
    • 虽然这不会选择对区域设置的自定义更改(即我使用的是德语,但使用的是健全的日期格式 [ISO 8601])。是否也有解决方法?
    • 就我而言,我没有在“OnStartUp”事件中使用它。只需将它放在我的“故障窗口”加载之前就足够了。谢谢。
    • 很好的提示。谢谢
    【解决方案2】:

    我在主窗口中输入 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">
    

    【讨论】:

    • 绝对是您在窗外制作原型时最快的方法!
    • 救命稻草,我爱你。要显示欧元符号和点而不是逗号(意大利文化):XAML 中的 Language="it-IT",然后使用 "€ #,##0.00" 格式化字符串
    • 如果您需要格式化 DataGridTextColumn,请使用:Binding="{Binding Path=PrezzoListino, ConverterCulture='it-IT', StringFormat='\{0:€ #,##0.00 \}'}" 在 DataGridTextColumn 中。示例是要绑定到意大利文化、欧元货币和“PrezzoListino”字段。
    【解决方案3】:

    什么对我有用:
    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 中 - &lt;TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" /&gt;

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

    【讨论】:

    • 这确实解决了自定义设置问题。对于第 1 步,我使用了“= new CultureInfo(CultureInfo.CurrentCulture.IetfLanguageTag)”而不是对其进行硬编码。
    • 太好了,谢谢。微软真的应该解决这个问题。
    猜你喜欢
    • 2011-04-13
    • 2013-07-30
    • 2011-04-13
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多