DateTime值的输出出现问题。计算机的当前区域性设置为de-AT(奥地利)。
下面的代码
string s1 = DateTime.Now.ToString("d");
string s2 = string.Format("{0:d}", DateTime.Now);
导致s1和s2都具有正确的值“30.06.2009”。
但在XAML中使用相同的格式时
<TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=d}"/>
输出为“6/30/2009”。似乎XAML字符串格式忽略了当前的区域性设置。这在Vista和XP上都发生。
我不想指定自定义格式,因为输出应该按照用户的首选区域性设置进行格式化。
有人有同样的问题吗?这是WPF中的bug吗?
6条答案
按热度按时间ohfgkhjo1#
请看我对StringFomat本地化问题的回答
qlckcl4x2#
要应用提到的here解决方案,请执行以下操作:
(1)将Startup事件处理程序添加到app.xaml中的Application类:
(2)添加handler函数:
然后,WPF字符串应根据区域性正确格式化。
vohkndzv3#
我在博客上写了一段时间:
这将告诉您如何让WPF使用正确的区域性:
http://www.nbdtech.com/blog/archive/2009/02/22/wpf-data-binding-cheat-sheet-update-the-internationalization-fix.aspx
这将在您修改控制面板中的设置时动态更改WPF区域性:
http://www.nbdtech.com/blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx
fslejnso4#
如果你想要一种特定的语言,你可以使用
xml:lang
在顶层元素上设置它。例如:
i86rm4rw5#
我知道这是一个老化的问题,但这对我来说一直很有效,分享知识是一件好事。由于我的应用程序总是动态更改语言,FrameworkElement.LanguageProperty.OverrideMetadata只工作一次,对我没有好处,所以请注意:
这里是主窗口,实际上你必须在所有的根元素(窗口)中做。这样就足够简单了。
9lowa7mx6#
你可以使用IValueConverter(它接受一个culture参数),并根据你的需要格式化值,我喜欢的是Matt汉密尔顿的这个可空转换器
}
这里是original