WPF XAML 绑定(bind)和 CurrentCulture 显示

标签 wpf localization

更改 CurrentCulture 时,我从 XAML 文档中看到一些无效行为。当我在窗口中有这样的元素时:

<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>

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

如果我使用默认语言运行表单,显然一切都很好。但是,如果我在代码中或在启动时更改区域性,则与日期和数字值的绑定(bind)仍会显示 en-US 格式。显示的 MessageBox.Show() 值适本地反射(reflect)了当前文化。

问题:WPF 是否不尊重绑定(bind)中的 CurrentCulture?如果是这样,究竟是什么决定了用于绑定(bind)的文化。就我而言,它显然是 en-US,但无论我在项目中将什么设置为默认语言,它总是绑定(bind)在 en-US 中。

任何想法表示赞赏...

最佳答案

事实证明,默认情况下,WPF 在绑定(bind)中不尊重 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);

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

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

关于WPF XAML 绑定(bind)和 CurrentCulture 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991526/

相关文章:

Identity Server 中的本地化

javascript - 如何从 Spring 客户端应用程序更新 Service Worker 中的语言

c# - 如何以编程方式提高 ScrollViewer 速度

c# - 根据Windows主题颜色wpf更改控件的背景

localization - 有没有办法在各种平台上本地化应用程序

swift - 使用 UITextChecker 对 Swift 5 中的希伯来语文本进行拼写检查

c# - 使用 C# 在 VisualBrush 中设置图像运行时

WPF 工具提示可见性

c# - 复选框绑定(bind) WPF

localization - Windows 运行时 : How to get the list of the user's preferred languages?