在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.DefaultCulture
和UserSettings.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属性,确定用于格式化的区域性。
以上是关于在WPF应用程序中全局设置文化(en-IN)的主要内容,如果未能解决你的问题,请参考以下文章