WPF XAML StringFormat DateTime:输出错误的文化?

Chr*_*ann 61 c# wpf xaml datetime

我在输出DateTime值时遇到了一些麻烦.我的计算机目前的文化设置为de-AT(奥地利).

以下代码

string s1 = DateTime.Now.ToString("d");
string s2 = string.Format("{0:d}", DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

结果s1和s2都具有正确的值"30.06.2009".

但是在XAML中使用相同的格式时

    <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=d}"/>
Run Code Online (Sandbox Code Playgroud)

输出是"6/30/2009".似乎XAML StringFormat忽略了当前的文化设置.这种情况发生在Vista和XP上.

我不想指定自定义格式,因为输出应该在用户首选的文化设置中格式化.

有同样问题的人吗?这是WPF中的错误吗?

lor*_*ron 42

参阅我对StringFomat本地化问题的回答

  • 如果您覆盖默认设置,它没有帮助 (4认同)

Ste*_*olt 15

要应用http://tinyurl.com/b2jegna中提到的解决方案,请执行以下操作:

(1)在app.xaml中向Application类添加一个Startup事件处理程序:

<Application x:Class="MyApp"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    ...
    Startup="ApplicationStartup">
Run Code Online (Sandbox Code Playgroud)

(2)添加处理函数:

private void ApplicationStartup(object sender, StartupEventArgs e)
{
    FrameworkElement.LanguageProperty.OverrideMetadata(
        typeof(FrameworkElement),
        new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
Run Code Online (Sandbox Code Playgroud)

然后应根据文化正确格式化WPF字符串.


Nir*_*Nir 10

不久前在我的博客上写过:

这将告诉您如何让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


Dom*_*see 5

如果您想要一种特定的语言,则可以使用在顶级元素上进行设置xml:lang

例如:

<Window xml:lang="de-AT">
...
</Window>
Run Code Online (Sandbox Code Playgroud)