在WPF应用程序中全局设置文化(en-IN)

问题描述 投票:24回答:3

我有一个应用程序,该应用程序基于印度,并且将文化设置为:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");

上面的代码在调用Window.InitializeComponent()方法之前被调用。

仍然在所有文本框中将$显示为CurrencySymbol。

如果我按如下所示绑定文本框,它将Rs.显示为CurrencySymbol:

Text="{Binding Salary,Mode=TwoWay,StringFormat=C,ConvertCulture=en-IN}".
c# wpf cultureinfo currentuiculture
3个回答
41
投票

我认为您需要添加以下内容。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

阅读更多内容:

http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting

仅举一个例子,这是我根据用户设置在程序中初始化区域性的方法,但是您只需用所需的区域性替换UserSettings.DefaultCultureUserSettings.Default.UICultrue

private static void InitializeCultures()
{
    if (!String.IsNullOrEmpty(UserSettings.Default.Culture))
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo(UserSettings.Default.Culture);
    }
    if (!String.IsNullOrEmpty(UserSettings.Default.UICulture))
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserSettings.Default.UICulture);
    }

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

9
投票

对我来说,如果我将这段代码放到OnStartup重写方法中,那么:

public partial class App : Application
{
      public App()
      {                
      }

      protected override void OnStartup(StartupEventArgs e)
      {
          var vCulture = new CultureInfo("de-DE");

          Thread.CurrentThread.CurrentCulture = vCulture;
          Thread.CurrentThread.CurrentUICulture = vCulture;
          CultureInfo.DefaultThreadCurrentCulture = vCulture;
          CultureInfo.DefaultThreadCurrentUICulture = vCulture;

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

          base.OnStartup(e);
      }
}

5
投票
Thread.CurrentThread.CurrentCulture = 
    System.Globalization.CultureInfo.GetCultureInfo("en-IN");

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

这将切换整个应用程序的默认语言。您只想在启动代码中使用此设置,因为每个应用程序只能应用一次此设置。您仍然可以在必要时覆盖单个表格,如下所示

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

所有WPF元素都包含可以分配的Language属性,确定用于格式化的区域性。

Reference

© www.soinside.com 2019 - 2024. All rights reserved.