WPF XAML绑定和CurrentCulture显示

Ric*_*ahl 4 wpf localization

当CurrentCulture被更改时,我看到XAML文档中的一些无效行为.当我在Window中有这样的元素时:

<Window x:Class="WpfLocalizationLocBaml.Test"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"
        x:Name="wndTest"
    Title="Test" Height="300" Width="300">
    <StackPanel>

        <TextBlock x:Name="lblCultureName" 
                   Text="{Binding Source={x:Static glob:CultureInfo.CurrentCulture},
                                  Path=DisplayName}" />


        <TextBlock x:Name="lblLocaleDateValue" 
                   Text="{Binding ElementName=wndTest, Path=TestDate}"/>

        <TextBlock x:Name="lblLocaleNumberValue" 
                   Text="{Binding ElementName=wndTest,Path=NumberValue,StringFormat=c}" />

    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

以及MessageBox.Show(NumberValue.ToString("c")); 表格开始时,我看到不同的结果.

如果我使用默认语言运行表单一切都很明显.但是,如果我在代码中更改文化或在启动时绑定到日期和数字值仍显示en-US格式.显示的MessageBox.Show()值适当地反映当前文化.

问题:WPF在绑定中不尊重CurrentCulture吗?如果是这样,究竟是什么决定了用于绑定的文化.在我的情况下,它显然是en-US,但无论我在我的项目中设置什么作为默认语言,它总是在en-US中绑定.

任何想法赞赏......

Ric*_*ahl 19

事实证明,默认情况下,WPF在绑定中不尊重CurrentCulture,而是默认为XAML文档中定义的xml:Lang设置,如果未提供则默认为en-US.这是相当蹩脚的行为 - 不确定为什么你不会像其他所有UI技术一样应用自动文化格式,但......

幸运的是,可以在文档的构造函数或Window/UserControl基类中应用一个简单的解决方法:

        // MAKE SURE you set the language of the page explicitly or else
        // all number and date formatting occurs using 
        this.Language = XmlLanguage.GetLanguage(
                        CultureInfo.CurrentCulture.IetfLanguageTag);
Run Code Online (Sandbox Code Playgroud)

此博客文章中提供了更多信息:

http://www.west-wind.com/weblog/posts/796725.aspx

  • 您可以在App.cs中为所有绑定执行此操作,如下所述:http://stackoverflow.com/questions/2764615/wpf-stringformat-0c-showing-as-dollars (2认同)
  • `IetfLanguageTag`已弃用.可以使用`.Name`代替. (2认同)