我在Windows 8 Metro应用程序(XAML&C#)中遇到了一些问题,涉及用户区域设置。似乎这些应用程序不会尊重用户的区域设置,因此即使你的Windows 8设置为以芬兰格式显示日期和时间,这些应用程序仍将使用美国格式进行显示。但这是一个如此严重的问题,我可能缺少了什么?
为了测试这个问题,我首先创建了一个WPF应用程序。该应用程序只打印出当前区域性和格式化的DateTime.Now:
private void Culture_Loaded_1(object sender, RoutedEventArgs e)
{
this.Culture.Text = System.Globalization.CultureInfo.CurrentCulture.DisplayName;
}
private void Date_Loaded_1(object sender, RoutedEventArgs e)
{
this.Date.Text = DateTime.Now.ToString();
}
这是我的默认区域设置:
运行时,应用程序以芬兰格式显示日期:
然后我将区域设置更改为美国:
![US Regional settings](https://istack.dev59.com/onfwM.webp)
再次运行该应用程序时,文化和格式发生了变化:
![US wpf formatting](https://istack.dev59.com/AKVff.webp)
这正如我所预期的一样,一切都能正常工作,并且这也是我对WinRT应用程序的期望。
因此,下一步,我使用相同的代码创建了一个WinRT(XAML&C#)应用程序,并将区域设置恢复为芬兰语。问题是:
即使我已经通过区域设置定义了格式应该是“芬兰语”,但WinRT应用程序仍会显示带有美国格式的日期时间。然后,我修改了应用程序的项目文件并将fi-FI设置为默认语言:
这个更改也修改了应用程序的文化:
奇怪。我将默认语言改回其默认值,格式恢复为美国格式。然后,我在项目中创建了“Strings-fi-FI”文件夹,并添加了一个空的“Resources.resw”文件。这个空文件似乎已经足够了,因为现在我得到了芬兰的格式:
一旦我删除空资源文件,格式就会恢复为美国格式:
非常奇怪。
这引出了一些问题,但我认为其中最主要的问题是:WinRT应用程序不像WPF应用程序那样遵循用户的区域设置,这是有意为之吗?
CurrencyFormatter
不支持小数,所以我需要一个解决方法... - Alberto Rivelli