WPF应用程序中的神秘资源/ CultureInfo行为

时间:2009-07-07 08:19:49

标签: c# wpf cultureinfo

我在WPF项目的Properties文件夹中有两个Resources文件(VS 2008):

  • Resources.resx
  • Resources.de-DE.resx

选择文化“de-DE”不起作用(没有错误,但总是使用“Resources.resx”中的字符串):

public App()
    {
        UntitledProject2.Properties.Resources.Culture = new CultureInfo("de-DE");
    }

但是:如果我将“Resources.de-DE.resx”重命名为“Resources.fr-CA.resx”或“Resources.en-US.resx”

然后通过

设置
UntitledProject2.Properties.Resources.Culture = new CultureInfo("fr-CA");

它有效!!但为什么!?神秘...

1 个答案:

答案 0 :(得分:0)

默认情况下,WPF将始终使用“en-US”;至少它是我最后一次检查时做的(这是.net 3.5)。如果您希望WPF改为使用系统当前设置的区域性,那么您将执行以下代码块:

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

这将覆盖用于FrameworkElement的Language依赖项属性的默认值,默认情况下,该属性也是“en-US”。

在应用程序的生命周期中尽早执行此代码。在此之后,您不必再担心它,除非您希望您的用户在程序执行过程中切换文化......