为什么这行代码
<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);
}
有关更多信息,请参阅这篇出色的帖子。
我在主窗口中执行 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}}" />
这会正确选择任何自定义区域设置。尽管我在第一步中使用了手动创建的CultureInfo ,但我确信可以传入其中一个静态类型 - 例如。System.Globalization.CultureInfo.CurrentCulture(虽然我还没有测试过......)