Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有不同CurrentCulture和CurrentUICulture的WPF应用程序_C#_Wpf_Culture_Lang_Uiculture - Fatal编程技术网

C# 具有不同CurrentCulture和CurrentUICulture的WPF应用程序

C# 具有不同CurrentCulture和CurrentUICulture的WPF应用程序,c#,wpf,culture,lang,uiculture,C#,Wpf,Culture,Lang,Uiculture,我们的目标是为用户提供不同的应用程序语言和格式设置(例如,文本为英语,日期/数字格式为德语)。到目前为止,我已经尝试了不同的方法,最有希望的是这一种(当然是简化的硬编码版本): 不幸的是,最后一行还强制对日期和数字(不仅仅是文本)使用英文格式。而且FrameworkElement中没有要重写的“CultureProperty”。那么,有没有一种方法可以在不到处使用StringFormat的情况下实现所需的行为呢 当我尝试在最后一行使用德语文化而不是英语时,一些文本是德语而不是英语(这同样是不正确

我们的目标是为用户提供不同的应用程序语言和格式设置(例如,文本为英语,日期/数字格式为德语)。到目前为止,我已经尝试了不同的方法,最有希望的是这一种(当然是简化的硬编码版本):

不幸的是,最后一行还强制对日期和数字(不仅仅是文本)使用英文格式。而且FrameworkElement中没有要重写的“CultureProperty”。那么,有没有一种方法可以在不到处使用StringFormat的情况下实现所需的行为呢


当我尝试在最后一行使用德语文化而不是英语时,一些文本是德语而不是英语(这同样是不正确的)。

可以。

如果不重写LanguageProperty元数据会发生什么?在没有设置语言的情况下,大多数转换器和东西都会默认为英语,然后语言有时会被破坏。例如,当用户关闭应用程序时,我会显示消息框(这是对onclose事件的反应),但其中的文本是德语,尽管上面代码中的两个CurrentUICulture属性都设置为英语。即使我调试到显示其自身的消息中,“Thread.CurrentThread.CurrentUICulture”也是因为未知的原因而出现在德语中的。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。@LukasKabrt:“使用WPF转换器更改区域性设置”,虽然非常简洁,但却是一个答案。
var german = new CultureInfo("de-DE");
var english = new CultureInfo("en-US");

Thread.CurrentThread.CurrentCulture = german;
CultureInfo.DefaultThreadCurrentCulture = german;

Thread.CurrentThread.CurrentUICulture = english;
CultureInfo.DefaultThreadCurrentUICulture = english;
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(english.IetfLanguageTag)));