WINRT TextBox数字格式不尊重当前文化

时间:2012-08-09 11:07:07

标签: wpf microsoft-metro windows-runtime cultureinfo

我正在将一个float属性绑定到我的TextBox控件。如果我使用“en”作为我的语言偏好,这是正确的。 输入数字“1.123”已正确解析。

如果我将mur文化切换为“de”,TextBox(和TextBlocks)中没有任何变化。仍然所有内容都用“。”格式化。

通过WinRT的“数字”键盘输入一个数字,使用“,”作为分隔符。但是,在Focus丢失之后,训练数字将不会成为数字的一部分(并且绑定的属性会更新。 所以“1,234”应该被解析为“1.234”。但是转换为“1”。

app.xaml.cs包含更多初始化,以确保将文化设置为正确的语言。允许的语言是(“en”和“de”(*,proj文件。 如果您进入调试器,CultureInfo.CurrentCulture正确设置为“de”。

public App()
{
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride =     CultureInfo.CurrentCulture.Name;
    CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;
    CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentCulture;

2 个答案:

答案 0 :(得分:1)

PrimaryLanguageOverride构造函数中设置DefaultThreadCurrentCultureDefaultThreadCurrentUICultureApplication无效,因为它们仅适用于新主题。但是,您的主UI线程已经创建,并且在输入构造函数时设置了它的文化。

要强制更改现有的UI线程,您必须按照CultureInfo.CurrentCulture中的说明设置Thread.CurrentCulture;但是,WinRT不支持Thread类。

这导致了为什么需要任何手工文化变革的问题。应用程序应该在启动时或从休眠状态恢复时自动获取用户的Windows文化。

答案 1 :(得分:0)

要获得我们可以使用的InvariantCulture设置,

“ApplicationLanguages.PrimaryLanguageOverride = CultureInfo.InvariantCulture.TwoLetterISOLanguageName;”

这对我有用。