为什么这行代码
<TextBlock Text="{Binding Net, StringFormat=c}"/>
当我的所有区域设置都设置为UK时,将结果输出为$ xx.xx。我希望它输出为£xx.xx。有任何想法吗?我尝试过stringformat的不同变体,包括StringFormat = {} {0:C},但仍然得到相同的结果。
感谢您的光临。
答案 0 :(得分:64)
我不确定这是否已在.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。
答案 1 :(得分:24)
我在主窗口中执行语言=“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">
答案 2 :(得分:15)
什么对我有用:
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 (我还没有测试过它......)