如何确定WPF控件使用的语言环境(文化)?

时间:2014-05-04 11:27:11

标签: c# wpf locale culture

WPF控件似乎没有.Culture属性,或者任何其他控制文本本地化的明显方法。更糟糕的是,在我的测试机器上它甚至不尊重系统区域设置。我的应用程序需要为德国人工作,因此测试机器运行德语版本的Windows,C#尊重这一点。因此

String.Format('{0}', 3.5) == "3,5"

但如果我将本地化留给WPF,例如通过将数字属性直接绑定到标签或数据网格单元格,我看到某种美国格式。因此,如果我将3.5格式化为货币,那么我会在屏幕上看到$3.50

所以:

  • 为什么WPF使用错误的语言环境?
  • 我该如何解决?

理想情况下,“修复”意味着默认情况下使其尊重系统区域设置,同时让我明确控制特定事物。因此,如果我在澳大利亚PC上打开德国发票,理想的情况是价格看起来像€3.50

1 个答案:

答案 0 :(得分:3)

WPF确实默认为美国,无论系统设置如何。

您可以在App.Xaml.cs中执行应用程序范围的设置:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {   
        // Thread settings are separate and optional  
        // affect Parse and ToString:       
        // Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL");
        // affect resource loading:
        // Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL");

        FrameworkElement.LanguageProperty.OverrideMetadata(
              typeof(FrameworkElement),
              new FrameworkPropertyMetadata(
                    XmlLanguage.GetLanguage(
                          CultureInfo.CurrentCulture.IetfLanguageTag)));

        base.OnStartup(e);
    }