为什么这行代码
<TextBlock Text="{Binding Net, StringFormat=c}"/>
当我的区域设置为英国时,将结果输出为$xx.xx。我希望它以£xx.xx的形式输出。有什么想法吗?我已经尝试了不同格式的字符串,包括StringFormat={}{0:C},但仍然得到相同的结果。
谢谢关注。
为什么这行代码
<TextBlock Text="{Binding Net, StringFormat=c}"/>
当我的区域设置为英国时,将结果输出为$xx.xx。我希望它以£xx.xx的形式输出。有什么想法吗?我已经尝试了不同格式的字符串,包括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);
}
详细信息请参见这篇优秀的文章。
我在主窗口中使用英国英语(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 @ 窗口级别定义 - 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(我没有测试过...)