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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在WPF应用程序中全局设置文化(en-IN)相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

Text="{Binding Salary,Mode=TwoWay,StringFormat=C,ConvertCulture=en-IN}".
答案

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

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)));
}
另一答案

对我来说,如果我将这段代码放到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);
      }
}
另一答案
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

以上是关于在WPF应用程序中全局设置文化(en-IN)的主要内容,如果未能解决你的问题,请参考以下文章

如何在mvc5中将文化设置为全局

WPF 文化问题

在 RichTextBox WPF 中设置文化/语言

Windows 容器 - 文化设置

在 .net 5 WPF 应用程序中设置文化

在 WPF、C# 中使用文化访问资源文件