如何在WPF应用程序中全局设置文化?

Bot*_*000 11 .net c# wpf xaml localization

我想根据用户首选项将WPF应用程序的文化设置为特定的文档.

我可以为当前线程执行此操作Thread.CurrentThread.Current(UI)Culture,但有没有办法为应用程序全局执行此操作(因此默认情况下它会影响所有线程)?

Wae*_*oul 11

没有办法为应用程序中的所有线程设置它,但是如果您在应用程序中创建线程,您可以自己设置文化,如上所述

要将Culture设置为Main Application,请使用以下代码段:

Dim newCulture As CultureInfo = new CultureInfo("fr-FR")
CurrentThread.CurrentCulture = newCulture
Run Code Online (Sandbox Code Playgroud)

  • 如何在APP.xaml.cs中设置它?为这个项目的任何线程设置这个CultureInfo? (2认同)

Sco*_*ock 6

试试看

<UICulture>en-US</UICulture>
Run Code Online (Sandbox Code Playgroud)

...在你的csproj文件中.


Gil*_*lad 5

好的,这就是我使用的,以确保我的所有应用程序都在en-US文化中.

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
XmlLanaguage lang = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(lang));
FrameworkContentElement.LanguageProperty.OverrideMetadata(typeof(System.Windows.Documents.TextElement), new FrameworkPropertyMetadata(lang));
Run Code Online (Sandbox Code Playgroud)

为了在文化中制作单个帖子,你可以制作

Thread.CurrentThread.CurrentCulture = new CultureInfo("EN-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("EN-US");
Run Code Online (Sandbox Code Playgroud)