【发布时间】:2015-10-23 14:34:33
【问题描述】:
我在一个 WPF 应用程序中看到了奇怪的行为(我在一个示例应用程序中进行了复制,以确保它)。
当应用程序启动时,我将 CultureInfo.CurrentCulture 和 CultureInfo.CurrentUICulture 设置为例如法语,在主应用程序窗口加载之前。然后主应用程序窗口加载并且本地化文本按预期显示为法语,如下所示:
<Window.Resources>
<Strings x:Key="Resources"/>
</Window.Resources
<Button Content={Binding Label, Source={StaticResource Resources}}/>
问题是,如果我单击按钮,文化和按钮的文本会重置为 en-US。我为 Click 事件添加了一个事件处理程序,其中 CurrentCulture 和 CurrentUICulture 都重置为“en-US”。
知道为什么会这样吗?这似乎很奇怪,这会以某种方式自动发生。
注意:我也试过做
var cultureName = CultureInfo.CurrentCulture.Name;
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(cultureName)));
和
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
在主窗口加载之前,但它没有帮助,文化仍然被重置。
更新:我也在 WPF 论坛 (https://social.msdn.microsoft.com/Forums/vstudio/en-US/884af2cb-fcc3-4cfe-bea0-7a84f74583a8/culture-gets-reset-on-button-click?forum=wpf) 上问过这个问题。在那里,我描述了实际情况可能会更好一些:我需要能够在应用程序启动时设置特定的文化,并在应用程序的整个生命周期中“保留”它。不幸的是,当单击按钮时,文化会被重置,如上所述。
【问题讨论】:
-
这个问题可能有你需要的答案。看起来好像文化由于某种原因没有应用于控件。但是,不确定您是否可以做很多事情。 stackoverflow.com/questions/4041197/…
-
有趣的是,如果我在按钮的单击处理程序中设置断点,文化只会在第一次被点击时重置为 en-US。如果单击一次后,我再次设置法语文化,然后再次单击按钮,则 CurrentCulture 和 CurrentUICulture 都是法语。
标签: c# wpf localization cultureinfo