我需要在保持美国数字格式的同时将文化设置为德语。因此,我正在设置
var culture = new System.Globalization.CultureInfo("de-DE");
var usCulture = new System.Globalization.CultureInfo("en-US");
culture.NumberFormat = usCulture.NumberFormat;
CultureManager.UICulture = culture;
CultureManager来自Infralution,可以即时切换语言。我可以验证NumberFormat确实设置为美国格式,例如一个 ”。”作为上面代码后的十进制分隔符。不过,以下表达式
<TextBox Text="{Binding MyDoubleVariable, StringFormat={}{0:0.#}}"/>
其中MyDoubleVariable = 2.13
显示为2,13
。哪里是我的错? 如何保留美国格式?
答案 0 :(得分:2)
WPF将在执行格式化时使用系统区域性。不知道你引用的框架。
尝试创建一个自定义IValueConverter,它将文化作为参数。
您可以为转换器创建格式字符串的字符串属性。
然后在您的xaml中,您可以为要使用的每个格式字符串创建一个转换器实例 - 例如,您可以有一个用于金钱而另一个用于数字。将转换器添加到绑定中,并在此时将文化说明符作为参数传递。
抱歉没有代码,在手机上接听。
答案 1 :(得分:0)
正如@kidshaw所说,WPF默认使用系统语言,但您可以覆盖它。
Setting Culture (en-IN) Globally in WPF App
How to set and change the culture in WPF
所以你应该在public static App() { ... }
中做到这一点(至少我们通常会这样做)。
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
然后将语言更改为德语,您通常会这样做。这应该使用美国格式保留XAML中的格式化内容,但使用德语中的所有其他内容。